我正在尝试将弹性搜索的查询/过滤器放在一起。这是结构的样子
{
_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的配置文件。
有没有办法查询整个数组项。
感谢
答案 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
}
}}
]
}
}
}
}
}