檔案結構-
{
"hits": [
{
"_type": "_doc",
"_id": "ef0a2c44179a513476b080cc2a585d95",
"_source": {
"DIVISION_NUMBER": 44,
"MATCHES": [
{
"MATCH_STATUS": "APPROVED",
"UPDATED_ON": 1599171303000
}
]
}
},
{
"_type": "_doc",
"_id": "ef0a2c44179a513476b080cc2a585d95",
"_source": {
"DIVISION_NUMBER": 44,
"MATCHES": [ ]
}
}
]
}
問題- MATCHES 是一個嵌套陣列,里面有一個文本欄位 MATCH_STATUS,可以有任何值,比如“APPROVED”、“REJECTED”。我正在尋找包含 MATCH_STATUS 的所有檔案,其值為“APPROVED”、“RECOMMENDED”以及 MATCHES 中沒有資料的地方(空陣列“MATCHES”:[])。請注意,我希望在單個查詢中進行此操作。
我可以在這樣的兩個單獨的查詢中做到這一點 -
獲取所有狀態 = 推薦、已批準的匹配項
"must": [
{
"nested": {
"path": "MATCHES",
"query": {
"terms": {
"MATCHES.MATCH_STATUS.keyword": [
"APPROVED",
"RECOMMENDED"
]
}
}
}
}
]
獲取具有空陣列“MATCHES”的所有匹配項:[]
{
"size": 5000,
"query": {
"bool": {
"filter": [],
"must_not": [
{
"nested": {
"path": "MATCHES",
"query": {
"exists": {
"field": "MATCHES"
}
}
}
}
]
}
},
"from": 0
}
uj5u.com熱心網友回復:
您可以使用 should 子句組合這兩個查詢。
{
"query": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"nested": {
"path": "MATCHES",
"query": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"terms": {
"MATCHES.MATCH_STATUS.keyword": [
"APPROVED",
"RECOMMENDED"
]
}
}
]
}
}
}
},
{
"bool": {
"must_not": [
{
"nested": {
"path": "MATCHES",
"query": {
"bool": {
"filter": {
"exists": {
"field": "MATCHES"
}
}
}
}
}
}
]
}
}
]
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/513905.html
上一篇:ElasticsearchMust_not對嵌套物件的存在查詢回傳排除欄位
下一篇:彈性搜索-嵌套聚合
