0

私は原始的なウェブサイトをやっているDjangoの初心者です。haystack と Whoosh を検索エンジンとしてインストールしたのは、それが最も簡単なことだったからです。正常に動作しますが、問題があり、Google で検索する方法がわかりません。私のサイトにはいくつかのカテゴリがあり、それらの名前にインデックスを付けて検索しました。そのため、ユーザーが「コンピューティング」と入力すると、コンピューティング カテゴリが検出され、そこにリンクされます。しかし問題がある。ユーザーが検索フィールドに「Comp」と入力しても、「Computing」はまったく見つかりません。これは構成できるもので、どのようにですか?

編集:

他に何を試しましたか?haystack 2.0 をインストールし、このチュートリアルに従って、whoosh の代わりに solr をインストールし、Ngram フィールドを試し、インデックスを 10 回再構築し、search_indexes.py を書き換えました。すべての。うまくいきません。Comp と入力しても Computing が見つかりません。他にできることはありますか?上記のチュートリアルでは、すべてが魔法のようにすぐに機能することに気付きました。

4

3 に答える 3

3

あなたがいつものことをするとき:

SearchQuerySet().filter(title='Computing')

Haystack 1.xでは、「コンピューティング」に完全に一致するすべてのものをフィルタリングします。

Haystackのフィールドルックアップを使用してその動作を変更できます。たとえば、「contains」を使用すると、指定された文字列(Computing、Utingcomp、Comp)を含むすべてのものがフィルタリングされます。

SearchQuerySet().filter(title__contains='Comp')

Haystack 2.xでは、デフォルトのフィルターは「contains」であるため、「すぐに使用できる」と期待されるとおりに動作するはずです。

于 2013-01-15T14:53:45.070 に答える
2

Check out the documentation on autocomplete. You need to setup your indices to support Ngram's, but this should be exactly what you need.

from haystack.query import SearchQuerySet

SearchQuerySet().autocomplete(content_auto='old')
# Result match things like 'goldfish', 'cuckold' & 'older'.
于 2013-01-15T15:28:15.380 に答える
0

したがって、私が理解している場合、探しているのは SQL の「LIKE」に相当します。問題は、Haystack をサポートする検索エンジンが RDBMS とは異なることです。

このフィルターの低レベルの実装にはワイルドカード文字の使用が含まれますが、Haystack バックエンドのほとんどは先頭のワイルドカード ( icontains/endswithフィルターに必要なもの) をサポートしていません。ただし、ほとんどのバックエンドは末尾のワイルドカードをサポートしているため、Haystack 2.x にはstartswithフィルターが含まれています。これが処理できない唯一のケースは、単語の終わりを検索することです。これは可能ではないようです。

したがって、インデックスを作成している場合:

"Look at our great discounts in Computer section"

次に、次の Haystack クエリは一致します。

SearchQuerySet().filter(title__startswith='comp')
# match!

Django フィルターと Haystackstartswithフィルターの違いに注目してください。Djangostartswithは完全な文の先頭 (つまり a CharField) で一致しますが、Haystack のものはトークンの先頭(つまり完全な文の各単語) で一致します。

それが役に立てば幸い!

于 2014-11-14T23:20:06.223 に答える