我嘗試查詢具有嵌套物件的檔案:
{
"name":"Adam",
"cities":[
{
"name":"California",
"activities":[
{
"name":"Hicking"
},
{
"name":"Camping"
},
{
"name":"Festival"
}
]
},
{
"name":"Miami",
"activities":[
{
"name":"Festival"
},
{
"name":"Diving"
},
{
"name":"Surfing"
}
]
}
]
}
我想根據一個活動檢索所有城市,例如,我想檢索亞當想去參加節日的所有城市。查詢結果應該是 California 和 Miami,如果我們搜索 Adam 將做 hicking 的城鎮是什么,查詢結果應該是 California。
這是應該的,但實際結果是,當我搜索亞當會做hiking的城市時,查詢結果是加利福尼亞和邁阿密!!
這是我使用的查詢:
GET index/_search
{
"query":
{
"bool": {"filter": [
{"term": {
"cities.activities.name.keyword": "Hicking"
}}
]}
},"_source":["cities.name"]
}
這是搜索結果:
"_index" : "index",
"_type" : "prod",
"_id" : "1",
"_score" : 0.0,
"_source" : {
"cities" : [
{
"name" : "California"
},
{
"name" : "Miami"
}
]
}
對于這樣的資料結構,如何以正確的方式進行查詢?
嵌套欄位有幫助嗎?
我應該重新設計資料結構嗎?
uj5u.com熱心網友回復:
您應該制作cities陣列nested并發送nested查詢到 filter cities.activities.name。并且要獲得與您的查詢匹配的子檔案,您應該使用inner_hits,因為彈性搜索默認回傳整個檔案,并且與您的過濾器不匹配的檔案將繼續在結果中回傳。
這是一個示例查詢,您應該檢查inner_hits結果:
{
"_source": ["cities.name"],
"query": {
"nested": {
"path": "cities",
"query": {
"term": {
"cities.activities.name.keyword": {
"value": "Hicking"
}
}
},
"inner_hits": {
"_source": ["cities.name"]
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/485202.html
