我正在搜索多种类型。返回的其中一个类型有一个名为my_field的字段。返回的其他类型没有该字段。我希望所有结果都不存在该项,并且只有当该项存在时该字段具有值True的结果。
如果my_field上的过滤器没有对查询得分做出贡献并且只进行过滤,那就太棒了。
这和我一样接近。如果你能帮助我,我会自鞭打1小时。
(不要用它,这是错误的!)
body = {
'query': {
'bool': {
'must': {
'multi_match': {
'query': 'pangolin',
'fields': ['_all', '_partials']
}
},
"should": {
"must_not": {
"exists": {
"field": "my_field"
}
}
},
"should": {
'term': {
'my_field': True
}
}
}
}
}
答案 0 :(得分:0)
你尝试过这样的事吗?
$ curl -XPOST localhost:9200/type1,type2/_search -d '{
"query": {
"bool": {
"must": [
{
"term": {
"my_field": true
}
},
{
"constant_score": {
"filter": {
"not_missing": {
"field": "type2.my_field"
}
}
}
}
]
}
}
}'
如果有效,请告诉我。祝你好运!
答案 1 :(得分:0)
以下似乎是我需要的。 文件必须与'pangolin'相匹配,文件将在2个文件上过滤。只有一个应该匹配。
https://www.elastic.co/guide/en/elasticsearch/reference/5.4/query-dsl-bool-query.html(请参阅关键字:过滤器和应该)。
body = {
"query": {
'bool': {
'must': {
'multi_match': {
'query': 'pangolin',
'fields': ['_all', '_partials']
}
},
"filter": {
"bool": {
"should": [{
"term": {
"my_field": True
}
},
{
"bool": {
"must_not": {
"exists": {
"field": "my_field"
}
}
}
}
]
}
}
}
}
}