2017-10-18 4 views
0

配列の中で最高のフィールドを取るために、型= best_fieldsでmulti_matchを使うことを試みますが、配列内の項目の合計スコアが得られます。どのように配列アイテムの最大得点だけを取得し、他の項目のスコアを無視するリクエストを作成するには?配列から最高のスコアしか取る方法は?

ドキュメント:

1: { "field": ["a b c", "b c"] } 
2: { "field": ["e f g", "b c"] } 

問合せ:

{ 
    "query": { 
    "multi_match": { 
     "query": "c", 
     "fields": [ 
     "field" 
     ], 
     "type": "best_fields" 
    } 
    } 
} 

結果:

1: {"score": 0.39, "highlight": ["a b <em>c</em>", "b <em>c</em>"] } 
2: {"score": 0.28, "highlight": ["b <em>c</em>"]} 

マッピング:

{ 
    "mappings": { 
    "bft": { 
     "_all": { 
     "enabled": false 
     }, 
     "properties": { 
      "field": { 
       "type": "text" 
      } 
     } 
    } 
    } 

答えて

0

私は実際にあなたがここで求めていることをすることは可能であるとは思わない。この問題は、ストリングの配列と単一の値の配列がスコアリングアルゴリズムによってどのように扱われるかにまでわかります。

あなたの質問を読んだ後、私はこの問題を少し掘り下げました。トピックで見つけられた情報は、["abc"、 "bc"]は["abcbc"]または「abcbc」は得点になります。

文書をElasticsearchから戻すと、すべての配列は文書を索引付けしたときと同じ順序で になります。取得した_sourceフィールド には、 と同じJSONドキュメントが含まれています。

しかし、配列は索引による検索が可能であり、マルチバリューフィールドとして配列されています( )。検索時に「最初の 要素」または「最後の要素」を参照することはできません。むしろ、配列を 値の袋と考えてください。 Reference

あなたが欲しいものを達成するために、私はあなたが自分自身の文書にあなたの個々の配列の値を分割する必要があり、あなたが「グループ」ドキュメントのフィルタとして使用することができます別のフィールドを提供します信じています。

関連する問題