Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›SQL ›Функции и операторы

Операторы LIKE и RLIKE

LIKE и RLIKE операторы обычно используются для фильтрации данных на основе строковых шаблонов. Они обычно действуют над полем, расположенным слева от оператора, но также могут действовать над константой (литеральным) выражением. Правая часть оператора представляет шаблон. Оба могут использоваться в предложении WHERE оператора SELECT, но LIKE также могут использоваться в других местах, например, для определения шаблона индекса или в различных командах SHOW. В этом разделе рассматривается только использование SELECT ... WHERE ....

Существенное различие между LIKE/RLIKE и предикатами полнотекстового поиска заключается в том, что первые действуют над точными полями, тогда как вторые также работают с анализированными полями. Если поле, используемое с LIKE/RLIKE, не имеет точного ненормализованного подполя (типа keyword), Elasticsearch SQL не сможет выполнить запрос. Если поле является точным или имеет точное подполе, оно будет использоваться как есть, или оно будет автоматически использовать точное подполе, даже если оно не было явно указано в операторе.

Оператор LIKE

Синтаксис:

expression        
LIKE constant_exp 

обычно поле или константное выражение

шаблон

Описание: Оператор SQL LIKE используется для сравнения значения со значениями, похожими по шаблону, используя символы подстановки. При использовании оператора LIKE используются два символа подстановки:

  • знак процента (%)
  • знак подчеркивания (_)

Знак процента представляет ноль, один или несколько символов. Знак подчеркивания представляет один символ. Эти символы могут использоваться в сочетании.

Никакие другие символы не имеют специального значения или не действуют как символы подстановки. Символы, часто используемые в качестве символов подстановки в других языках (* или ?), обрабатываются как обычные символы.

SELECT author, name FROM library WHERE name LIKE 'Dune%';

    author     |     name
---------------+---------------
Frank Herbert  |Dune
Frank Herbert  |Dune Messiah

Также можно использовать символ экранирования, если нужно сопоставить сами символы подстановки. Это можно сделать с помощью оператора ESCAPE [escape_character] после оператора LIKE ...:

SELECT name, author FROM library WHERE name LIKE 'Dune/%' ESCAPE '/';

В приведенном выше примере / определен как символ экранирования, который необходимо разместить перед символами % или _, если нужно сопоставить эти символы в шаблоне специально. По умолчанию символ экранирования не определен.

Хотя LIKE является допустимым вариантом при поиске или фильтрации в Elasticsearch SQL, предикаты полнотекстового поиска MATCH и QUERY быстрее, мощнее и предпочтительнее.

Оператор RLIKE

Синтаксис:

expression         
RLIKE constant_exp 

обычно поле или константное выражение

шаблон

Описание: Этот оператор похож на оператор LIKE, но пользователь не ограничен поиском строки на основе фиксированного шаблона со знаком процента (%) и знаком подчеркивания (_); в этом случае шаблон представляет собой регулярное выражение, что позволяет создавать более гибкие шаблоны.

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

SELECT author, name FROM library WHERE name RLIKE 'Child.* Dune';

    author     |      name
---------------+----------------
Frank Herbert  |Children of Dune

Хотя RLIKE является допустимым вариантом при поиске или фильтрации в Elasticsearch SQL, предикаты полнотекстового поиска MATCH и QUERY быстрее, мощнее и предпочтительнее.

Предпочтительные предикаты полнотекстового поиска

При использовании LIKE/RLIKE стоит рассмотреть использование предикатов полнотекстового поиска, которые быстрее, мощнее и предлагают возможность сортировки по релевантности (результаты могут возвращаться на основе того, насколько хорошо они соответствуют запросу).

Например:

LIKE/RLIKE

ЗАПРОС/СООТВЕТСТВИЕ

foo LIKE 'bar'

MATCH(foo, 'bar')

foo LIKE 'bar' AND tar LIKE 'goo'

MATCH('foo^2, tar^5', 'bar goo', 'operator=and')

foo LIKE 'barr'

QUERY('foo: bar~')

foo LIKE 'bar' AND tar LIKE 'goo'

QUERY('foo: bar AND tar: goo')

foo RLIKE 'ba.*'

MATCH(foo, 'ba', 'fuzziness=AUTO:1,5')

foo RLIKE 'b.{1}r'

MATCH(foo, 'br', 'fuzziness=1')

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/sql-like-rlike-operators.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API