考慮以下索引
PUT /orchards
{
"mappings": {
"properties": {
"fruits": {
"type": "nested",
"properties": {
"farms": {
"type": "long"
},
"visits": {
"type": "long"
},
"counts": {
"type": "long"
}
}
}
}
}
}
帶著這些檔案
POST orchards/_doc
{
"fruits" : [
{
"farms" : 1,
"visits" : 1,
"counts" : [1]
}
]
}
POST orchards/_doc
{
"fruits" : [
{
"farms" : 1,
"visits" : 1,
"counts" : [1]
},
{
"farms" : 2,
"visits" : 2,
"counts" : [1,2]
}
]
}
現在,我想撰寫一個查詢以僅回傳具有
"fruits" : [
{
"farms" : 1,
"visits" : 1,
"counts" : [1]
}
]
我通過撰寫以下查詢進行了嘗試
GET /orchards/_search
{
"query": {
"nested": {
"path": "fruits",
"query": {
"bool": {
"must": [
{
"terms": {
"fruits.counts": [
1
]
}
},
{
"match": {
"fruits.visits": 1
}
},
{
"match": {
"fruits.farms": 1
}
}
]
}
}
}
}
}
但是,結果命中包含兩個檔案,即它不執行完全匹配。
我想避免使用腳本比較長度,因為這是一項昂貴的操作 - 如本文所述
也嘗試了其他一些變體,但它們似乎都沒有命中或兩個檔案都沒有命中。
參考
查詢嵌套型別
查詢陣列型別
uj5u.com熱心網友回復:
特長;
這是預期的行為。在嵌套檔案中,您得到了匹配項,因此回傳了整個檔案。
如果您只對比賽中的資訊感興趣,您可以使用類似inner_hits
解決方案
注意_source: false和inner_hits:{}
GET /orchards/_search
{
"_source": "false",
"query": {
"nested": {
"path": "fruits",
"inner_hits": {},
"query": {
"bool": {
"must": [
{
"terms": {
"fruits.counts": [
1
]
}
},
{
"match": {
"fruits.visits": 1
}
},
{
"match": {
"fruits.farms": 1
}
}
]
}
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/530377.html
