Как сделать поиск по регулярным выражениям в elasticsearch?

Пользователь

от brook , в категории: SQL , 2 года назад

Как сделать поиск по регулярным выражениям в elasticsearch?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от felix , 2 года назад

@brook 

Для того чтобы осуществлять поиск по регулярным выражениям в Elasticsearch, можно использовать функцию регулярных выражений, называемую Regexp Query.


Regexp Query позволяет выполнить поиск в индексе Elasticsearch с помощью регулярных выражений. Для этого нужно создать запрос, который содержит Regexp Query и передать его в Elasticsearch.


Вот пример запроса, который будет искать все документы в индексе, содержащие слова, начинающиеся с буквы "a" и заканчивающиеся на "e":

1
2
3
4
5
6
7
8
9
{
  "query": {
    "regexp": {
      "fieldname": {
        "value": "a.*e"
      }
    }
  }
}


В этом примере "fieldname" - это поле, в котором будет происходить поиск, а "a.*e" - это регулярное выражение, которое определяет шаблон поиска.


Здесь используется ".*", что означает "любой символ, любое количество раз". Это означает, что запрос будет находить все слова, начинающиеся с "a" и заканчивающиеся на "e", независимо от количества символов между ними.


Кроме того, можно использовать другие операторы регулярных выражений, такие как "+" или "?", чтобы определять дополнительные условия для поиска.


Обратите внимание, что использование Regexp Query может быть довольно ресурсоемким, поэтому следует использовать его с осторожностью, особенно если в индексе много данных.

Пользователь

от yasmine , год назад

@brook 

Для эффективного поиска по регулярным выражениям в Elasticsearch, рекомендуется использовать индексирование данных с помощью анализаторов, чтобы получить лучшие результаты и ускорить процесс поиска. Анализаторы позволяют Elasticsearch разбивать текст на токены (слова или части слов), которые могут быть легко и эффективно проиндексированы и использованы для поиска. Когда регулярное выражение применяется к тексту, индексированному с использованием анализатора, вы можете получить точные результаты поиска.


Вот пример создания индекса с настройкой анализатора:


PUT /my_index { "settings": { "analysis": { "analyzer": { "my_analyzer": { "type": "custom", "tokenizer": "standard", "filter": [ "lowercase", "my_filter" ] } }, "filter": { "my_filter": { "type": "ngram", "min_gram": 2, "max_gram": 20 } } } }, "mappings": { "properties": { "fieldname": { "type": "text", "analyzer": "my_analyzer" } } } }


В этом примере указывается создание индекса "my_index" с анализатором "my_analyzer", который использует стандартный токенизатор, преобразование к нижнему регистру и фильтр "ngram" для разбиения слов на части по диапазону количества символов.


Затем вы можете использовать Regexp Query для поиска с использованием регулярных выражений:


POST /my_index/_search { "query": { "regexp": { "fieldname": "a.*e" } } }


В этом примере выполняется поиск в индексе "my_index" по полю "fieldname" соответствующему регулярному выражению "a.*e".


Обратите внимание, что использование регулярных выражений в Elasticsearch может быть дорого в плане ресурсов, особенно при работе с большими объемами данных. Поэтому следует использовать эту функциональность с осторожностью и оптимизировать ее при необходимости.