簡體   English   中英

在Elasticsearch中使用范圍過濾器和內部字段的未知名稱的嵌套搜索查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM