我正在针对当前指向多个索引的别名运行查询。并非所有文档在这些索引上都具有相同的结构,因此我尝试运行过滤的查询:
"filter" : {
"bool" : {
"must" : [ {
"term" : { "channel" : "24" }
},
{
"range" : {
"startTime" : { "gt" : "now" }
}
}]
}
}
ElasticSearch正在过滤所有具有通道24的文档,但是我也希望所有其他没有属性通道的文档。例如,我的查询应包含所有 Actor (文档不具有属性channel和startTime),电影(文档不具有属性channel和startTime),流派(文档不具有属性channel和startTime)和电视节目/节目(文档具有属性channel和startTime)在第24 channel 播放。
有没有一种方法可以不涉及过滤器脚本?我可以使用脚本来实现这一点,但是查询的性能确实很差。
谢谢
蒂亚戈
最佳答案
试试这个:
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"
}
}
]
}
}
]
}
}
}
关于elasticsearch - 当字段不存在时让ElasticSearch忽略过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34002491/