【问题标题】:How to use AND operator in elasticsearch to query nested fields?如何在elasticsearch中使用AND运算符查询嵌套字段?
【发布时间】:2016-08-23 01:46:21
【问题描述】:

我在 elasticsearch 中有 2 个文档,结构如下:

文档 1:

{
  "specification": [
                    {
                     "name": "Processor",
                     "value": "Intel"
                    },
                    {
                     "name": "RAM",
                     "value": "2GB"
                    }
                   ]
}

Document 2:
{
  "specification": [
                    {
                     "name": "Processor",
                     "value": "Intel"
                    },
                    {
                     "name": "RAM",
                     "value": "3GB"
                    }
                   ]
}

我想获取具有值 intel 和 2GB(即)第一个文档的规范的文档。但是当我尝试使用必须(AND 运算符)时,我什么也得不到。如果我使用应该(OR 运算符),我会同时获得这两个文件。谁可以帮我这个事?以下是我的查询..

{
  "query": {
    "nested": {
      "path": "specification",
      "query": {
        "bool": {
          "must": [

                {
                    "bool": {
                        "must": [
                            { "match": { "specification.name": "Processor" }},
                            { "match": { "specifications.value": "Intel" }}
                        ]
                    }
                },
                {
                    "bool": {
                        "must": [
                            { "match": { "specification.name": "RAM" }},
                            { "match": { "specifications.value": "2GB" }}
                        ]
                    }
                }
              ]
        }
      }
    }
  }
}

【问题讨论】:

    标签: search elasticsearch solr lucene elasticsearch-2.0


    【解决方案1】:

    试试这个:

    {
      "query": {
        "bool": {
          "must": [
            {
              "nested": {
                "path": "specification",
                "query": {
                  "bool": {
                    "must": [
                      {
                        "match": {
                          "specification.name": "Processor"
                        }
                      },
                      {
                        "match": {
                          "specification.value": "Intel"
                        }
                      }
                    ]
                  }
                }
              }
            },
            {
              "nested": {
                "path": "specification",
                "query": {
                  "bool": {
                    "must": [
                      {
                        "match": {
                          "specification.name": "RAM"
                        }
                      },
                      {
                        "match": {
                          "specification.value": "2GB"
                        }
                      }
                    ]
                  }
                }
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      • 2021-01-21
      • 2014-10-22
      • 1970-01-01
      • 2019-07-10
      • 2020-09-04
      • 1970-01-01
      相关资源
      最近更新 更多