クエリに一致するレコードが複数ある場合、レスポンス内で最高のスコアを持つ結果を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": {}
}
何を試してみましたか? –
可能です。 '' size '':1'を使い、デフォルトでは**、最高のスコアを持つ文書を1つだけ与えます。ドキュメントはスコアでデフォルトでソートされるので、ソートメカニズムを変更していない場合、 '' size ":1'で十分です。 –
サイズ:1 ..どのような場合でもドキュメントのみを返します。私の用途は異なります。 –