[英]Nested search query in Elasticsearch with range filter and unknown names of inner fields
我正在將數據存儲在elasticsearch數據庫中,並試圖查詢它,並按數字范圍過濾。
這是數據庫中文檔的最小化結構:
"a": {
"b": {
"x": [1, 2, 3, 4], // note: x, y and z are not compulsory
"y": [2, 3, 4], // some documents can have only x or z or maybe x and z etc.
"z": [5, 6]
}
}
現在,我希望查詢返回所有文檔,其中“ b”子字段中的任何子字段中至少有一個數字介於2到4之間。這里重要的是,我不知道“ b”所有子字段的名稱b”。
我提出的查詢是:
POST /i/t/_search
{
"query": {
"query_string": {
"fields": ["a.b.*"],
"query": "number:[2 TO 4]"
}
}
}
查詢不會引發錯誤,但也不會返回任何結果。 我什至不確定,哪種搜索查詢最適合此類任務。 我僅使用查詢字符串,因為它是我發現的唯一可以加入未知字段名稱和范圍的字段。
嘗試刪除number:
在您的查詢中:
{
"query": {
"query_string": {
"fields": ["a.b.*"],
"query": "[2 TO 4]"
}
}
}
(可選)嘗試count:[2 TO 4]
( docs )
允許在字段路徑中使用*通配符的另一種查詢類型是Multi Match Query,但老實說,我看不到如何將它與數字范圍結合使用。 我唯一想到的是:
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "2",
"fields": ["a.b.*"]
}
},
{
"multi_match": {
"query": "3",
"fields": ["a.b.*"]
}
},
{
"multi_match": {
"query": "4",
"fields": ["a.b.*"]
}
}
]
}
}
}
...這很丑。 第一種使用query_string的解決方案簡短而強大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.