我需要使用某种条件逻辑过滤掉文档(我认为),但我无法使其正常工作。
我的文件是这样的:
{type: 'A'}
{type: 'B', foo: ['bar']}
{type: 'B', foo: []}
现在我需要过滤掉type
为空的foo
'B'的所有文档。
在伪代码中,查询将是:
if(type == 'B' && foo == []) {
// filter out this document
}
我的主要查询如下所示:
query: {
filtered: {
query: {
bool: {
must: {
match_all: []
}
}
},
filter: {
bool:{
must_not: {
term: {'_hidden': true}
}
}
}
}
}
Elasticsearch版本是1.5.0
答案 0 :(得分:0)
如果我明白了,是吗? 如果type == a,则所有具有将返回的文档。 如果输入== b且字段foo不在那里它们会返回,有意义吗?
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"should": [
{
"term": {
"type": "a"
}
},
{
"bool": {
"must": [
{
"term": {
"type": "b"
}
}
],
"must_not": [
{
"missing": {
"field": "foo"
}
}
]
}
}
]
}
}
}
}
}