簡體   English   中英

ElasticSearch 如何對嵌套查詢進行 AND 運算

[英]ElasticSearch How to AND a nested query

我想弄清楚如何與我的彈性搜索查詢。 我嘗試了幾種不同的變體,但總是遇到解析器錯誤。

我擁有的是這樣的結構:

{
  "title": "my title",
  "details": [
    { "name": "one", "value": 100 },
    { "name": "two", "value": 21 }
  ]
}

我在我的映射中將details定義為嵌套類型。 我想要實現的是一個查詢,它匹配標題的一部分,並通過詳細信息的namevalue匹配各種詳細信息。

我有以下查詢使我幾乎到達那里,但我無法弄清楚如何AND細節。 例如,我想找到任何具有以下內容的內容:

  1. 一個具有值的細節小於或等於100
  2. 兩個值小於或等於25 的AND 細節

以下查詢僅允許我按一個詳細信息名稱/值進行搜索:

"query" : {
  "bool": {
    "must": [
      { "match": {"title": {"query": titleQuery, "operator": "and" } } },
      {
        "nested": {
          "path": "details",
          "query": {
            "bool": {
              "must": [
                { "match": {"details.name" : "one"} },
                { "range": {"details.value" : { "lte": 100 } } }
              ]
            }
          }
        } // nested
      }
    ] // must
  }
}

作為第二個問題,查詢標題然后將查詢的嵌套部分移動到過濾器中會更好嗎?

你離得太近了! 只需在您的外部"must"添加另一個"nested"子句:

POST /test_index/_search
{
   "query": {
      "bool": {
         "must": [
            {
               "match": {
                  "title": {
                     "query": "title",
                     "operator": "and"
                  }
               }
            },
            {
               "nested": {
                  "path": "details",
                  "query": {
                     "bool": {
                        "must": [
                           {"match": {"details.name": "one" } },
                           { "range": { "details.value": { "lte": 100 } } }
                        ]
                     }
                  }
               }
            },
            {
               "nested": {
                  "path": "details",
                  "query": {
                     "bool": {
                        "must": [
                           {"match": {"details.name": "two" } },
                           { "range": { "details.value": { "lte": 25 } } }
                        ]
                     }
                  }
               }
            }
         ]
      }
   }
}

這是我用來測試它的一些代碼:

http://sense.qbox.io/gist/1fc30d49a810d22e85fa68d781114c2865a7c92e

編輯:哦,您的第二個問題的答案是“是”,但如果您使用的是 2.0,事情會發生一些變化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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