0

私は検索全体に不慣れで、干し草の山を学ぶのに苦労しています.(バックエンドとしてのsolr)

これが私の干し草スタック/solrの理解です。
私の理解が間違っている場合は、コメントしてください。

Solr
solr はドキュメント検索エンジンです。(RDBMS とは対照的に)
ユーザーは、指定された用語でドキュメントをすばやく検索できます。(これには逆インデックスを使用できます)
solr では、ドキュメントが適切に構造化されている場合、ファセット検索も可能です (xml のように)。

Haystack
一部のアプリケーション (e コマース サイトなど) では、製品データを RDBMS に格納することをお勧めします (xml も機能しますが、RDBMS は xml よりも更新に適していると思います)
。製品データを格納する場合RDBMS では、ユーザー クエリに関連するデータを取得するクエリを記述できますが、面倒です。
Haystack は、RDBMS のデータをドキュメントに変換できるため、solr でインデックスを作成できます。solr がデータにインデックスを付けた後、ほとんどの検索を solr に委任できます。

ここで質問です。

  1. 必要に応じて DB スキーマを作成し、引き続き haystack/solr を使用できますか?

  2. 次のような DB モデルがあるとします。任意のカテゴリのファセット検索を有効にするには、search_indexes.py はどのようになりますか?

...

class Category(models.Model):   
    name = models.CharField(max_length=200)  
    parentCategory = models.ForeignKey('self', null=True, blank=True)

class Item(models.Model):   
    name = models.CharField(max_length=200)  
    categorys = models.ManyToManyField(Category)  
    details = models.CharField(max_length=1024)

カテゴリはネストできます (カテゴリは親カテゴリを持つことができます)。

4

1 に答える 1

1

Haystack は、その概要が示すように、Django のモジュラー検索用です。サイト検索を構築し、インデックスを維持する方法を容易にすることに重点を置いており、非常にうまく機能します。汎用の Django ORM と比較する意味はありませんが、検索機能は多少重複します。
モデルの場合、 Item() が属するカテゴリが複数あるため、次を試すことができますFacetMultiValueField

# in models.py
class Category(models.Model):
    # add __unicode__ method
    def __unicode__(self):
        return self.name

# in search_indexes.py
from haystack.indexes import *
class ItemIndex(SearchIndex):
    text = CharField(document=True, use_template=True)
    name = CharField(model_attr='name')
    categories = FacetMultiValueField() # or MultiValueField w/ facet=True

    def prepare_categories(self, obj):
        return obj.categories.all()

そしてhttp://django-haystack.readthedocs.org/en/latest/faceting.htmlに従って、ビューで SearchQuerySet を操作します。

于 2012-04-16T13:06:57.400 に答える