我使用的是ES 2.3,并且查询filter
部分如下所示:
"filter": {
"query": {
"bool": {
"must": [
{
"nested": {
"path": "employees",
"query": {
"bool": {
"must": [
{
"range": {
"employees.max_age": {
"lte": 50
}
}
},
{
"range": {
"employees.min_age": {
"gte": 20
}
}
}
]
}
}
}
},
{
"exists": {
"field": "employees"
}
},
{
#....other filter here based on root document, not on nested employee document
}
]
}
}
}
}
我有一个过滤器,我在其中检查嵌套文档中的一些条件"员工"在一个更大的文档叫做公司,但是我想运行这个过滤器,只有"员工"对象存在,因为某些文档可能根本没有嵌套文档。所以我补充说,{"exists": {"field": "employees"}}
但这似乎不起作用。知道我应该做些什么改变才能让它发挥作用?
答案 0 :(得分:0)
你可以这样做。但是,如果文档没有employees
字段,则无论如何它们都不会被提取,因此我不确定您为什么要首先需要/ exists
查询
{
"filter": {
"query": {
"bool": {
"must": [
{
"nested": {
"path": "employees",
"query": {
"exists": {
"field": "employees"
}
}
}
},
{
"nested": {
"path": "employees",
"query": {
"bool": {
"must": [
{
"range": {
"employees.max_age": {
"lte": 50
}
}
},
{
"range": {
"employees.min_age": {
"gte": 20
}
}
}
]
}
}
}
}
]
}
}
}
}