7

単語の一部のみを検索するための結果を生成することを実装しようとしています (autocomplete私が間違っていなければ、Haystack のドキュメントに従って呼び出されます)。

例:

探す"gol"

結果"goldfish"

私は何を試しましたか?

docs のステップ 1 で求められたとおりに実行し、Index クラスに次の行を追加しました。

content_auto = indexes.EdgeNgramField(model_attr='content')

それからやったpython manage.py rebuild_index

ただし、インデックスを再構築すると、インデックス付きテーブルの最初のエントリであり、インデックスを作成したモデルであるというエラーが発生しましたhaystack.exceptions.SearchFieldError: The model '<Person: Reginald>' does not have a model_attr 'content'.ReginaldPerson

実際、私のモデルにはフィールドがありませんがcontent、ドキュメントに示されているように、そのようなフィールドを持つ必要はありません。

Whoosh 2.4.1Django-haystack 1.2.7およびを使用してDjango 1.4います。

4

3 に答える 3

3

これが私が今これを解決している方法です。

それ以外の:

content_auto = indexes.EdgeNgramField(model_attr='content')

使用する:

content_auto = indexes.EdgeNgramField(use_template=True)

次に、これらのテンプレートを作成できます。たとえばItemIndexcatalogアプリに があり、そこで検索したいnamedescription. そのため、次の内容を含むファイルをtemplates/search/indexes/catalog/calleditem_content_auto.txtで作成しました。

{{ object.name }}
{{ object.description }}

これは私が望むように機能しているようです。作業よりも少し退屈です'content'が、それで十分です。

于 2014-03-05T19:01:52.647 に答える
1

参照用に更新された例を次に示します (こちらを参照)。

#search_indexes.py
class Book(indexes.SearchIndex, indexes.Indexable):
    text = indexes.EdgeNgramField(document=True, use_template=True)

    def get_model(self):
        return Book

#template
{{object.name}}

#query
SearchQuerySet().autocomplete(text=my_query)
于 2017-03-13T09:51:28.840 に答える
0

model_attr は、既存のモデル属性、callable、またはリレーションを参照するために使用されます。

http://django-haystack.readthedocs.org/en/v1.2.7/searchfield_api.html#SearchField.model_attr http://django-haystack.readthedocs.org/en/v2.1.0/searchfield_api.html#model-attr

于 2014-03-05T14:01:03.870 に答える