0

Queue バックエンドを使用QueuedSignalProcessorして、Elasticsearch 検索エンジンで Django haystack を構成しました。redis現在、問題が発生していることを除いて、すべてが機能しています。タイトルがcode fixesandである db に 2 つのオブジェクトがあります (末尾code fixessに余分なものがあります)。s部分検索を実行する必要があります。検索するcode fixと、タイトル付きのオブジェクトが返されますが、タイトル付きのオブジェクトはcode fixes返されませんcode fixess:

my_model = SearchQuerySet().models(MyModel)
objects = my_model.filter(content__contains=q) # q = "code fix"

索引ファイル:

from haystack import indexes
from myapp.models import MyModel

class MyModelIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    title = indexes.CharField(model_attr="title")

索引テンプレート:

{{ object.title }}
{{ object.description }}

PS インデックスが更新されます。私が検索しfixessたかのように、タイトル付きの2番目のオブジェクトが表示されますcode fixessが、この場合は最初ではありません。だけを検索するとcode、両方が返されます。

その理由は何ですか?

4

1 に答える 1

0

その理由は、Haystack がSnowball アナライザーを使用するように構成されているためです。

esこれは、 inなどの既知の (英語の) 語尾を検索し、正確な単語ではなく語幹語 ( ) をインデックスにfixes格納することで、一種のファジー マッチングを可能にします。fix

Snowball アナライザーはessfromfixessを語尾として認識しないため、単語を語幹に切り詰めません。

ElasticSearch は実際には他にも多くのアナライザーを提供しており、トークナイザーとフィルターのビルディング ブロックからカスタム アナライザーを定義することもできます。ただし、ソースデータのスペルミスは扱いにくいものかもしれません...音声学的(「次のように聞こえる」)アプローチを試す必要があるかもしれません:
https : //github.com/elasticsearch/elasticsearch-analysis-phonetic

最後に、Haystack が使用する ElasticSearch 構成のカスタマイズを容易にするこのプロジェクトを試してください:
https://github.com/bennylope/elasticstack

于 2014-02-12T17:35:03.583 に答える