如何在elasticsearch中使用AND运算符来查询嵌套字段?

时间:2016-04-28 10:40:52

标签: search elasticsearch solr lucene elasticsearch-2.0

我在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运算符)时,我什么都没得到。如果我使用should(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" }}
                        ]
                    }
                }
              ]
        }
      }
    }
  }
}

1 个答案:

答案 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"
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}