2016-10-22 13 views
0

私はElasticsearchのドキュメントを読んでいて、Elasticsearchで使用されている関連性スコアリングの基礎について興味がありました。したがって、ESでは、基本周波数、逆文書頻度、およびフィールド長ノルムの3つの要素が、特定の文書の関連スコアを計算するために使用されます。Elasticsearchでの関連スコアリングのカスタマイズ

ここで条件を指定すると、自分の結果が用語の頻度とフィールドの長さの影響を受けないようにします。私はそれを達成するにはどうすればいいですか、私はどこかでそれを読んで"not_analyzed"アナライザをフィールドに提供する必要があります。しかし、それは私の機能の多くを敗北させるので、ここでの質問は、自分のカスタムアナライザーや他のアナライザーを使用して、用語の頻度やフィールド長の影響を受けないようにする方法があります。

答えて

0

も少し見ていました。しかし、私が考えることができるのは、定数スコア機能を使用することだけです。 https://www.elastic.co/guide/en/elasticsearch/guide/current/ignoring-tfidf.html

また、この男はあなた自身の類似アルゴリズムをどのように作成できるかをよく説明しています。彼が自分自身を描写するので、これはあなたが試みる最後のものであるべきですが、それは本当に難しいことではありません。 http://stefansavev.com/blog/custom-similarity-for-elasticsearch/

0

あなたが使用できる機能の1つはconstant_scorequeryです。たとえば、表示される時間とドキュメントの長さに関係なく、特定の用語セットがテキストに表示されるタイミングを検出する場合は、constant_scoreのフィルタまたはクエリをラップして固定スコアを割り当てることができますそれらに合致する文書に変換します。

たとえば、「クランクシャフト」、「シリンダー」、および「エンジン」という用語を持つ自動車に関連する文書を検索する場合、「シリンダー」という用語に重点を置いて「エンジン」よりも「クランクシャフト」と「クランクシャフト」、そしてより多くの重量、あなたがこのようなクエリを使用できます。この場合

GET /_search 
{ 
    "query": { 
     "bool": { 
      "should": [ 
       { 
        "constant_score": { 
         "boost": 3, 
         "query": { "match": { "fulltext": "cylinder" }} 
        } 
       }, 
       { 
        "constant_score": { 
         "boost": 2, 
         "query": { "match": { "fulltext": "crankshaft" }} 
        } 
       }, 
       { 
        "constant_score": { 
         "query": { "match": { "fulltext": "engine" }} 
        } 
       } 
      ] 
     } 
    } 
} 

は、あなたはこの条項のすべてを文書にマッチするだろうが、あなたは可能性それぞれの用語の重要性を、パラメータboostを使用してそれぞれに独自のスコアを割り当てて制御します。

この場合、照会された用語の割合が高い文書に大きな重みを与えるスコアである「Coordination factor」も考慮されます。

関連する問題