6

私はHaystack1.2.6をWhoosh2.4とDjango1.3で使用しています。架空の投稿を説明する以下のモデルがあるとしましょう。

Post(models.Model):
    title = models.CharField()
    body = models.TextField()

ボディフィールドのオートコンプリート用に、次のような投稿インデックスを作成しました。

PostIndex(SearchIndex):
    text = CharField(document=True, use_template=True)
    content_auto = indexes.EdgeNgramField(model_attr='body')

干し草の山のドキュメントをよく読んだので、タイトルフィールドと本文フィールドの両方でオートコンプリートが可能かどうかわかりません。

だから...それは可能ですか...?

4

2 に答える 2

9

私はこれに基づいてそれを行うことができまし。インデックスでオートコンプリートするフィールドごとにEdgeNgramFieldを作成し、オートコンプリートを2つの異なる検索クエリセットに適用して連結します。

sqs = SearchQuerySet().models(Post)
sqs1 = sqs.filter(title_auto=q)
sqs2 = sqs.filter(body_auto=q)

sqs = sqs1 | sqs2

追加のフィルタリングを行う必要がある場合は、オートコンプリートの後に行う必要があります(少なくとも、これが私にとって唯一の方法でした)。

于 2013-04-15T22:23:48.240 に答える
4

これがより簡単な方法です。テンプレートで連結を実行して使用しますEdgeNgramField(ただし、投稿の本文で連結を実行するとコストがかかります:

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

#In <app>\template\search\index\<app>\post_text.txt
{{ object.title }} {{object.body}}

次に、そのようなクエリはすべて、タイトルと本文の両方でオートコンプリートされます

sqs = SearchQuerySet().models(Post).autocomplete(text='hello')

Haystack2.xを使用したPS

于 2014-10-07T13:45:28.527 に答える