ElasticSearch:查询数组中的多个值

时间:2014-10-28 13:34:31

标签: elasticsearch

我正在尝试将弹性搜索的查询/过滤器放在一起。这是结构的样子

{
   _id:"0872300234",
   customers:[
      {
         name:"bob",
         priority:1,
         type:"GoodUser"
      },
      {
         name:"dan",
         priority:10,
         type:"BadUser"
      },
      {
         name:"sam",
         priority:10,
         type:"GoodUser"
      },
      {
         name:"cam",
         priority:2,
         type:"BadUser"
      }
   ]
}

所以我们称之为“个人资料”文件/记录。我想找到拥有客户的所有配置文件,优先级为10,并且是“goodUser”(同一客户),因此在示例中sam将匹配但dan不会。我得到了一个查询,它给了我一个客户优先级为10且客户(不是同一个)的类型为GoodUser的配置文件。

有没有办法查询整个数组项。

感谢

1 个答案:

答案 0 :(得分:4)

您需要嵌套类型。有关嵌套对象的更多信息,您可以找到here以及在嵌套字段之间的关联很重要的情况下需要它们的原因。在您的情况下,映射需要如下所示:

{
  "mappings": {
    "profile": {
      "properties": {
        "customers": {
          "type": "nested",
          "properties": {
            "name": {
              "type": "string"
            },
            "priority": {
              "type": "integer"
            },
            "type": {
              "type": "string"
            }
          }
        }
      }
    }
  }
}

查询也需要嵌套:

{
  "query": {
    "nested": {
      "path": "customers",
      "query": {
        "bool": {
          "must": [
            {"match": {
              "customers.type": "goodUser"
            }},
            {"term": {
              "customers.priority": {
                "value": 10
              }
            }}
          ]
        }
      }
    }
  }
}