我试图找出如何对列表/数组进行查询,然后执行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。
我希望这很清楚。我真的很感激如何解决这个问题。
由于
答案 0 :(得分:0)
感谢@DanTuffery,我似乎必须将我的架构更改为嵌套类型。
http://joelabrahamsson.com/elasticsearch-nested-mapping-and-filter/