4

現在、elasticsearchバックエンドでhaystackを実行しています。部分的な単語検索を正しく実行するのに問題があります。

現在、EdgeNgramFieldを持つインデックスがあります。このフィールドで検索を試みましたが、完全に一致しない限り結果が見つかりません。これを使用して商品を検索しようとしているので、たとえば、「sun」と入力すると、「sunglasses」の結果が得られません。

私はelasticsearchで直接curlコマンドを使用して、何が起こっているのかを理解できるかどうかを確認し始めました。ngramアナライザーと一緒にcurlを使用して独自のインデックスを直接作成し、部分的な単語検索を使用して適切な結果を受け取ります。

もう1つの興味深い点は、curlを使用して直接作成したelasticsearchでテストインデックスに対してcurlを使用して_mappingコマンドを直接実行すると、次のようになります。 "testfield":{"type": "string"、 "analyzer": "test_analyzer"}ただし、haystackによって作成されたインデックスに対してmappingコマンドを実行すると、 "type":"string"しかありません。使用すべきedgengram_analyzerについては何も述べていません。

何か案は?

4

1 に答える 1

5

pyelasticsearchを適切に使用していないelasticsearch_backend.pyのhaystackにバグがあると思います。868行目は次のようになります。

self.conn.put_mapping('modelresult', current_mapping, index=self.index_name)

そして、それを次のように置き換えると:

self.conn.put_mapping(doc_type='modelresult', mapping=current_mapping, index=self.index_name)

これがpyelasticsearchが期待する方法であり、edgengram_analyzerがEdgeNgramFieldフィールドに追加されていることがわかります。少なくともそれは私にとってはうまくいきます。

于 2012-11-28T01:59:18.123 に答える