0

現在、ElasticSearchPython/Django、およびDjango-Haystackを使用しています。

キーワードが左端にどれだけ近いかに基づいてアイテムをランク付けしたいと考えています。


アイテムは

  • Jeff is friends with John, Laura and Edward

  • Laura is friends with Francis, Drake, Jessica and Jeff

  • Edward is friends with Laura, Jeff and Jeff


ジェフがクエリの場合、次の結果が必要です

  1. Jeff is friends with John, Laura and Edward

  2. Edward is friends with Laura, Jeff and Jeff

  3. Laura is friends with Francis, Drake, Jessica and Jeff


しかし、私はこれを取得します:

  1. Edward is friends with Laura, Jeff and Jeff

  2. Jeff is friends with John, Laura and Edward

  3. Laura is friends with Francis, Drake, Jessica and Jeff

何か案は?

4

1 に答える 1

1

elasticsearch にクエリを実行する_scoreと、各ドキュメントのフィールドが返されます。URL にexplain=onパラメーターを追加すると、スコアに関する説明も返されます。これにより、ドキュメントが上位にある理由とそうでない理由を理解できます。

いずれにせよ、最初のドキュメントには Jeff という単語が 2 回含まれているため、最高のスコアが得られると思います。3 番目の文書は、テキスト フィールドが他の文書よりも長く、Jeff の一致のみが含まれているため、最後の文書です。これが Lucene スコアの計算方法です。たとえば、フィールドの長さがスコアに影響するという事実を無効にするなど、微調整することはできますが、Lucene コードを作成する意思がない限り、その背後にあるロジックを完全に変更することはできません。独自の LuceneSimilarity実装を作成して、カスタム .xml を使用して Elasticsearch にプラグインすることができますSimilarityProviderこの例を見てください。

于 2012-09-14T19:33:35.593 に答える