我正在针对当前指向十几个索引的别名运行查询。并非所有文档在这些索引中都具有相同的结构,因此我尝试运行筛选的查询:
"filter" : {
"bool" : {
"must" : [ {
"term" : { "channel" : "24" }
},
{
"range" : {
"startTime" : { "gt" : "now" }
}
}]
}
}
ElasticSearch正在过滤所有包含24频道的文档,但我还希望所有其他文档都没有属性频道。例如,我的查询应该带来所有演员(doc没有属性channel和startTime),电影(doc没有属性channel和startTime),类型(doc没有属性channel和startTime)和电视节目/节目(doc有属性频道)和startTime)通道24上的空气。
有没有办法在不涉及过滤器脚本的情况下执行此操作?我可以使用脚本来实现这一点但是查询的性能会非常糟糕。
谢谢 蒂亚戈
答案 0 :(得分:2)
试试这个:
POST /test_index/_search
{
"filter": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"term": {
"channel": "24"
}
},
{
"range": {
"startTime": {
"gt": "now"
}
}
}
]
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "channel"
}
},
{
"exists": {
"field": "startTime"
}
}
]
}
}
]
}
}
}