2016-05-04 17 views
0

クエリに一致するレコードが複数ある場合、レスポンス内で最高のスコアを持つ結果を1つだけ返すようにESにクエリできますか?レスポンス内のスコアに基づく弾性検索クエリ

サンプルクエリがあれば教えてください。ありがとう。

サンプルレスポンス/ドキュメント: - 検索のように使用します。 現在、私のサービスはレコードの下に戻ります。

record1 - product1, value1, score=1.5 
record2 - product1, value2, score=1.4 
record3 - product2, value1, score=1.7 
record4 - product2, value2, score=0.8 
record5 - product3, value1, score=1.2 

私は結果を、スコアに基づいて製品をフィルタリングする以下のレコードのみで欲しいと思います。製品ごとに1つのレコードのみ。

record1 - product1, value1, score=1.5 
record3 - product2, value1, score=1.7 
record5 - product3, value1, score=1.2 

さらなる詳細: - が作成したカスタムアナライザ: -

"analysis": { 

    "filter": { 
     "autocomplete_filter": { 
      "type": "edge_ngram", 
      "min_gram": "1", 
      "max_gram": "20" 
     } 
    }, 
    "analyzer": { 
     "autocomplete": { 
      "filter": [ 
       "autocomplete_filter" 
      ], 
      "type": "custom", 
      "tokenizer": "keyword" 
     } 
    } 

} 

マッピング: -

"PRODUCT_ID": { 

    "analyzer": "autocomplete", 
    "type": "string" 

} 

問合せ: -

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "term": { 
      "PRODUCT_ID": "CON-HSH-AS" 
      } 
     } 
     ], 
     "must_not": [], 
     "should": [] 
    } 
    }, 
    "from": 0, 
    "size": 10, 
    "sort": [], 
    "aggs": {} 
} 
+0

何を試してみましたか? –

+2

可能です。 '' size '':1'を使い、デフォルトでは**、最高のスコアを持つ文書を1つだけ与えます。ドキュメントはスコアでデフォルトでソートされるので、ソートメカニズムを変更していない場合、 '' size ":1'で十分です。 –

+0

サイズ:1 ..どのような場合でもドキュメントのみを返します。私の用途は異なります。 –

答えて

2

あなたはをチェックアウトすることができます。たぶんそれはあなたのユースケースの助けになるでしょう:)

+0

ええええええええええええええええええええええええええええええええええええええええええええええええ、 –

関連する問題