[英]ElasticSearch: Multi-level nested query "AND" syntax
我有一個類似於 elasticsearch doc 多級嵌套查詢示例中顯示的示例索引的索引: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query .html#multi-level-nested-query-ex
鑒於這些示例文檔:
{
"driver" : {
"last_name" : "McQueen",
"vehicle" : [
{
"make" : "Powell Motors",
"model" : "Canyonero"
},
{
"make" : "Miller-Meteor",
"model" : "Ecto-1"
}
]
}
}
{
"driver" : {
"last_name" : "Hudson",
"vehicle" : [
{
"make" : "Mifune",
"model" : "Mach Five"
},
{
"make" : "Miller-Meteor",
"model" : "Ecto-1"
}
]
}
}
我需要能夠找到 driver.vehicle.make 匹配兩個值的文檔,即同時擁有車輛制造“Powell Motors”和“Miller-meteor”的司機應該匹配 McQueen 而不是 Hudson。 我嘗試了類似於文檔示例的 make 和 model 查詢的查詢,但它返回 0 個文檔:
{
"query": {
"nested": {
"path": "driver",
"query": {
"nested": {
"path": "driver.vehicle",
"query": {
"bool": {
"must": [
{ "match": { "driver.vehicle.make": "Powell Motors" } },
{ "match": { "driver.vehicle.make": "Miller-Meteor" } }
]
}
}
}
}
}
}
}
將“必須”更改為“應該”會返回兩個文檔。 我似乎找不到在同一個文檔中查詢車輛數組的多個值匹配的查詢。
上面的查詢返回 0 個文檔,因為您的示例中沒有單個文檔(在driver.vehicle
內)的driver.vehicle.make
值為“Powell Motors”和“Miller-meteor”。
注意:這里的單個文檔是指driver.vehicle
中的每個單獨的文檔(或對象)。
因此,當您將must
子句更改為should
子句時,它會返回那些具有driver.vehicle.make
值為"Powell Motors" OR "Miller-meteor"
的文檔(在本例中為文檔)。 must
用作邏輯 AND 運算符,並且should
用作邏輯 OR 運算符。
根據您的要求,我相信您想要那些擁有車輛的司機制造“Powell Motors”或“Miller-meteor”的文件應該匹配 McQueen 而不是 Hudson 。
在這種情況下,您需要將嵌套查詢與普通查詢結合起來,這可以使用 bool 查詢來完成。
您修改后的查詢將是
{
"query": {
"nested": {
"path": "driver",
"query": {
"bool": {
"must": [
{
"match": {
"driver.last_name": "McQueen"
}
},
{
"nested": {
"path": "driver.vehicle",
"query": {
"bool": {
"should": [
{
"match": {
"driver.vehicle.make": "Powell Motors"
}
},
{
"match": {
"driver.vehicle.make": "Miller-Meteor"
}
}
]
}
}
}
}
]
}
}
}
}
}
搜索結果將是
"hits" : [
{
"_index" : "soidx1",
"_type" : "_doc",
"_id" : "1",
"_score" : 3.105637,
"_source" : {
"driver" : {
"last_name" : "McQueen",
"vehicle" : [
{
"make" : "Powell Motors",
"model" : "Canyonero"
},
{
"make" : "Miller-Meteor",
"model" : "Ecto-1"
}
]
}
}
}
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.