Elasticsearch使用AND查询过滤结果

时间:2014-09-14 05:56:55

标签: elasticsearch

我试图找出如何对列表/数组进行查询,然后执行AND查询以进一步缩小搜索范围。我不确定该怎么做的部分是我需要将AND查询仅应用于与第一个查询中列表中的项目匹配的项目,而不是所有项目。

我的数据看起来像这样:

{
  "persons": [
    {
      "person": {
        "name": "Jimmy",
        "addresses": [
          {
            "spend": 1000,
            "state": "CA"
          },
          {
            "spend": 5000,
            "state": "CA"
          }
        ]
      }
    },
    {
      "person": {
        "name": "Mary",
        "addresses": [
          {
            "spend": 10000,
            "state": "TX"
          },
          {
            "spend": 500,
            "state": "CA"
          }
        ]
      }
    }
  ]
}

我想找到person.person.addresses.state ==" CA" AND persons.person.addresses.spend> 2000

如果我执行此查询:

"query": {
   "query_string": {
      "query": "(persons.person.addresses.state:CA) AND (persons.person.addresses.spend > 2000)"
   }
}

我找回了吉米和玛丽,因为玛丽有一个地址,其中州是#34; CA"即使用于CA的花费不是> 2000.我真正想要回归的只是吉米,因为他只有一个地址对象,其中状态值是" CA"那个相同的对象花费了> 2000。

我希望这很清楚。我真的很感激如何解决这个问题。

由于

1 个答案:

答案 0 :(得分:0)

感谢@DanTuffery,我似乎必须将我的架构更改为嵌套类型。

http://joelabrahamsson.com/elasticsearch-nested-mapping-and-filter/