Запрос регулярного выражения ElasticSearch нет данных

#elasticsearch

#elasticsearch

Вопрос:

Почему мой запрос регулярных выражений не находит этот документ.

введите описание изображения здесь

Документ

введите описание изображения здесь

Я не хочу находить сообщение, похожее на это. введите описание изображения здесь

Ответ №1:

удалите знак доллара из вашего выражения regexp.

 {
  "query": {
    "regexp": {
      "message.keyword": "I,.* "
    }
  }
}
  

Обновления (из моих комментариев)

  • Почему знак доллара не работает? ИМХО, документация по Elastic немного вводит в заблуждение. В первом абзаце (том, в котором упоминаются ^ и $ привязки) говорится о «большинстве движков регулярных выражений«, но не об Elasticsearch. Фактически, в следующем абзаце говорится, что «Шаблоны Lucene всегда привязаны«, и поскольку Lucene поддерживает Elasticsearch, вам не нужно будет явно определять ^ и $ в вашем регулярном выражении.
  • Производительность. Такого рода запросы очень дороги и могут быстро снизить производительность. Я бы предложил пересмотреть структуру и / или отображение ваших документов.

Комментарии:

1. Мне нужно найти только сообщения, заканчивающиеся пробелом. Если я сделаю, как вы предлагаете, я получу другие сообщения.

2. Просто добавьте один пробел после символа звезды (обновил мой ответ). Но будьте осторожны, подобный запрос будет очень дорогим с точки зрения производительности. Я бы посоветовал вам пересмотреть структуру ваших документов и / или их сопоставление.

3. Да, осознайте затраты. Почему завершающий $ не работает?

4. Боюсь, что приведенная здесь документация немного вводит в заблуждение. В моей интерпретации первый абзац (тот, в котором упоминаются якоря ^ и $) говорит о «большинстве движков регулярных выражений», но не об Elasticsearch. Фактически, в следующем абзаце говорится, что «шаблоны Lucene всегда привязаны», и поскольку Lucene поддерживает Elasticsearch, вам не нужно будет явно определять ^ и $ в вашем регулярном выражении

5. Привет, на вопрос дан ответ? Было ли это полезно?