#elasticsearch
#elasticsearch
Вопрос:
Почему мой запрос регулярных выражений не находит этот документ.
Документ
Ответ №1:
удалите знак доллара из вашего выражения regexp.
{
"query": {
"regexp": {
"message.keyword": "I,.* "
}
}
}
Обновления (из моих комментариев)
- Почему знак доллара не работает? ИМХО, документация по Elastic немного вводит в заблуждение. В первом абзаце (том, в котором упоминаются
^
и$
привязки) говорится о «большинстве движков регулярных выражений«, но не об Elasticsearch. Фактически, в следующем абзаце говорится, что «Шаблоны Lucene всегда привязаны«, и поскольку Lucene поддерживает Elasticsearch, вам не нужно будет явно определять^
и$
в вашем регулярном выражении. - Производительность. Такого рода запросы очень дороги и могут быстро снизить производительность. Я бы предложил пересмотреть структуру и / или отображение ваших документов.
Комментарии:
1. Мне нужно найти только сообщения, заканчивающиеся пробелом. Если я сделаю, как вы предлагаете, я получу другие сообщения.
2. Просто добавьте один пробел после символа звезды (обновил мой ответ). Но будьте осторожны, подобный запрос будет очень дорогим с точки зрения производительности. Я бы посоветовал вам пересмотреть структуру ваших документов и / или их сопоставление.
3. Да, осознайте затраты. Почему завершающий $ не работает?
4. Боюсь, что приведенная здесь документация немного вводит в заблуждение. В моей интерпретации первый абзац (тот, в котором упоминаются якоря ^ и $) говорит о «большинстве движков регулярных выражений», но не об Elasticsearch. Фактически, в следующем абзаце говорится, что «шаблоны Lucene всегда привязаны», и поскольку Lucene поддерживает Elasticsearch, вам не нужно будет явно определять ^ и $ в вашем регулярном выражении
5. Привет, на вопрос дан ответ? Было ли это полезно?