Я запускаю запрос против псевдонима, который в настоящее время указывает на десяток индексов. Не все документы имеют одинаковую структуру через эти индексы, так что я пытаюсь запустить отфильтрованный запрос:Имея ElasticSearch игнорировать фильтр, когда поле не существует
"filter" : {
"bool" : {
"must" : [ {
"term" : { "channel" : "24" }
},
{
"range" : {
"startTime" : { "gt" : "now" }
}
}]
}
}
ElasticSearch фильтрует все документы, которые имеют канал 24, но я также хочу, чтобы все другие документы, которые не имеют канал атрибута. Например, мой запрос должен включать всех участников (doc не имеет канала свойств и startTime), фильмы (doc не имеет канала свойств и startTime), жанры (doc не имеет канала свойств и startTime) и tv показывает/программы (doc имеет канал свойств и startTime), что воздух на канале 24.
Есть ли способ сделать это без участия сценария фильтра? Я мог бы достичь этого, используя скрипт, но тогда производительность запроса будет очень плохим.
Спасибо Тьяго
Hi @Sloan, он не работал. Я запустил фильтр против индекса, содержащего телевизионные шоу/программы, и не возвратил какой-либо документ. – Thiago
Это будет довольно сложно диагностировать проблему, если вы не можете предоставить некоторые данные примера. В идеале, данные должны быть упрощены, чтобы сохранить суть вашей проблемы, но не полон посторонних вещей, и все еще достаточно разнообразны, чтобы дать понять, что вы ожидаете получить, а что нет. Возможно, вы захотите добавить его в суть или что-то еще. –
Если вы можете предоставить данные, уже упакованные в массовый запрос (что-то вроде [this] (http://sense.qbox.io/gist/d5625c80946f332718b0fa166bba27efd264b76e)), еще лучше. –