Фильтрация Elasticsearch с данными диапазона дат и запросом must_not bool

Я хочу извлечь следующий запрос sql в asticsearch.

Select * 
from someTable
Where @timestamp < some_date and @timestamp >= some_other_date
and dst != '-'

А затем сделайте несколько агрегаций по возвращенным документам. Часть агрегации я разобрался и отлично работает. Но я не фильтрую документы должным образом. Я попытался следующий запрос, но я получаю документы с dst = '-', которые в свою очередь вычисляются в агрегации.

Запрос

"query": {                              
    "bool": {
        "must_not": {
            "term": {
                "dst": '-'
            }
        }, 
        "filter":{
            "range":{
                "@timestamp":{
                    "gte":"a date",
                    "lt": "another date"
                }
            }
        }
    }   
}      

Я делаю что-то неправильно. Я установил размер 0, потому что я использую агрегаты (здесь не показано). Elasticsearch ver2.4 и библиотека pythonasticsearch.

Я знаю, что это не работает, потому что результаты агрегации содержат значения из документов, которые dst является '-"

1 ответ

Решение

Это поле не должно анализироваться, так как оно удаляет анализатор - char из поля в индексе.

Если вам нужно проанализировать это поле по другой причине, используйте несколько полей. https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html

Другие вопросы по тегам