Elasticsearch выдает SearchParseException
запрос временного анализа, если найдены документы, не содержащие поля, используемого в критериях сортировки.
SearchParseException: Parse Failure [Не найдено сопоставлений для [цена] для сортировки]
Как я могу успешно искать в этих документах, даже если в некоторых это price
поле отсутствует ?
Ответы:
Покопав больше, я нашел решение, приведенное ниже.
ignore_unmapped
должно быть явно указаноtrue
в предложении сортировки.Для получения дополнительной информации см. Ссылки Elasticsearch для:
источник
"ignore_unmapped" : true
и он снова начал работать, но странно то, что произошло за кулисами! Кто знает! Во всяком случае, теперь это работает. +1Обратите внимание, что «ignore_unmapped» теперь не рекомендуется к использованию «unmapped_type». Это было сделано в рамках # 7039
Из документации: до версии 1.4.0 был логический параметр ignore_unmapped, который не содержал достаточной информации для принятия решения о генерируемых значениях сортировки и не работал для поиска по перекрестному индексу. Он по-прежнему поддерживается, но пользователям рекомендуется вместо этого перейти на новый unmapped_type.
По умолчанию поисковый запрос завершается ошибкой, если с полем не связано сопоставление. Параметр unmapped_type позволяет игнорировать поля, для которых нет сопоставления, и не сортировать по ним. Значение этого параметра используется для определения того, какие значения сортировки выдавать. Вот пример того, как это можно использовать:
Если какой-либо из запрашиваемых индексов не имеет сопоставления для цены, Elasticsearch обработает его, как если бы было сопоставление типа long, и все документы в этом индексе не имеют значения для этого поля.
источник
Очевидно, ElasticSearch не выполняет сортировку по нулевым значениям. Я предполагал, что он будет рассматривать null как начало или конец (как в случае с порядком SQL), но я считаю, что он также вызывает эту ошибку.
Поэтому, если вы видите эту ошибку, вам может потребоваться убедиться, что атрибут сортировки имеет значение по умолчанию при отправке в ElasticSearch.
У меня была эта ошибка с Rails + ElasticSearch + Tire, потому что столбец сортировки не имел значения по умолчанию, поэтому он отправлялся в ES как null.
Эта проблема указывает на то, что обрабатываются нулевые значения, но это не было моим опытом. В любом случае это стоит попробовать.
источник
У меня возникла та же проблема (вроде бы; были бы некоторые ошибки, но некоторые результаты), но в моем случае мой поиск выполнялся в корне (индекс не указан), и ошибки, которые я получал, были связаны с тем, что поиск / порядок также глядя на индекс Кибаны.
Глупая ошибка, но, может быть, это поможет кому-то другому, кто окажется здесь.
источник
Elasticsearch 6.4
просто укажите индекс и все в Кибане
ПЕРЕД
ПОСЛЕ
источник
если вы используете es 6.7
Попробуй это
источник
Вы также можете использовать скрипт, который дает вам некоторую гибкость:
источник
Что происходит, когда мы используем приведенный ниже код, где added_on - это дата !! текст атрибута анализируется, что означает, что он разбивается на отдельные слова при сохранении и позволяет выполнять поиск произвольного текста по одному или нескольким словам в поле
поэтому с полями связаны «текст» и «ключевое слово», поэтому, если нам нужно использовать агрегирование в запросе, нам нужно значение поля, как правило, ключевое слово.
источник