次のマッピングがあります
posts":{
"properties":{
"prop1": {
"type": "nested",
"properties": {
"item1": {
"type": "string",
"index": "not_analyzed"
},
"item2": {
"type": "string",
"index": "not_analyzed"
},
"item3": {
"type": "string",
"index": "not_analyzed"
}
}
},
"name": {
"type": "string",
"index": "not_analyzed"
}
}
}
これらのマッピングについて、次のようにインデックス付けされたオブジェクトを検討してください
{
"name": "Name1",
"prop1": [
{
"item1": "val1",
"item2": "val2",
"item3": "val3"
},
{
"item1": "val1",
"item2": "val5",
"item3": "val6"
}
]
}
そして別のオブジェクト
{
"name": "Name2",
"prop1": [
{
"item1": "val2",
"item2": "val7",
"item3": "val8"
},
{
"item1": "val12",
"item2": "val9",
"item3": "val10"
}
]
}
次に、prop1.item1 の値が「val1」または「val2」のいずれかであるドキュメントを検索したいとします。また、val1 と val2 の両方を含むドキュメントが、「val1」または「val2」のいずれかのみを含むドキュメントよりも多くのスコアを持つように、結果を並べ替えたいと考えています。
次のクエリを試しましたが、一致数に基づいてスコアが付けられないようです
{
"query": {
"filtered": {
"query": {"match_all": {}},
"filter": {
"nested": {
"path": "prop1",
"filter": {
"or": [
{
"and": [
{"term": {"prop1.item1": "val1"}},
{"term": {"prop1.item2": "val2"}}
]
},
{
"and": [
{"term": {"prop1.item1": "val1"}},
{"term": {"prop1.item2": "val5"}}
]
},
{
"and": [
{"term": {"prop1.item1": "val12"}},
{"term": {"prop1.item2": "val9"}}
]
}
]
}
}
}
}
}
}
両方のドキュメントを提供する必要がありますが、最初のドキュメントにはフィルター内のものが 2 つ含まれているのに対し、2 番目のドキュメントには 1 つしか含まれていないため、より多くのスコアが必要です。ほとんどの一致に基づいて結果をソートするための適切なクエリを誰かが手伝ってくれませんか?