2

私はdjango haystack 1.27を使用しています。検索できます。それは素晴らしいことです。しかし、部分的な単語を検索するにはどうすればよいですか?

例えば:

次を検索: OREM、OR、EM

単語: ローレム

結果: ローレム

search_indexes.py

class NewsIndex(SearchIndex):
    text = CharField(document=True, use_template=True)
    date = DateTimeField(model_attr='creation_date')
    def get_model(self):
        return News

    def index_queryset(self):
        return self.get_model().objects.get_published_models(TOWN, News)

site.register(News, NewsIndex)

ビュー.py

def search(request):
    order = self.request.GET.get("order", None)
    sqs = SearchQuerySet()
    if order:
        ...
        sqs = sqs.order_by(order + "date")

    search_template = SearchView(template='general/search.html',
                                 searchqueryset=sqs)(request)

注文は難しくありませんでした。

検索インデックス エンジンには部分検索 :/ が含まれていると思いました。Whoosh はこの機能をサポートしていますか? 私はテストしました:オートコンプリート機能ですが、「EM」、JUST「LOR」の結果はありません。

4

1 に答える 1

7

NgramFieldの代わりに使用してみてくださいCharField

Ngrams索引付けできるすべてのものを生成します。
使用の欠点はNgramField、インデックス ファイルが非常に大きくなることです。
私のサイズは、24 レコードだけで 2MB です。

EdgeNgramField代わりに使用することもできます。多くの可能性を排除します。

例えば:

データ: 「ドキュメント」

NgramField の使用:
クエリ: 'ocument' 結果: 'documentation'

EdgeNgramField の使用:
クエリ: 'ocument' 結果: なし

于 2013-02-28T13:03:19.107 に答える