blog-post

Продвинутый полнотекстовый поиск с оператором REGEX от Manticore Search

Введение

Продвинутый полнотекстовый поиск в поисковых системах является ключевым для повышения точности и уместности результатов поиска. Это особенно критично в таких областях, как анализ патентов, рецензирование контрактов, идентификация положений и поиск товарных знаков, где точность функционала поиска имеет решающее значение. Прогресс Manticore Search от простой функции <code>REGEX()</code> до полнотекстового оператора REGEX, доступного с версии 6.3.0 , является значительным достижением в этом контексте, предлагая сложное и тонкое сопоставление шаблонов в запросах.

Новый оператор REGEX особенно полезен для сложных сценариев поиска. Например, на платформах аналитики данных он может искать специфические шаблоны в логах или репозиториях кода, идентифицируя уникальные коды ошибок или конструкции программирования. В базах данных академических исследований он позволяет исследователям находить публикации с определёнными стилями цитирования или паттернами библиографических ссылок. Более того, в поисках товарных знаков оператор REGEX незаменим для нахождения точных или схожих товарных знаков, учитывая разнообразный и сложный характер текстов товарных знаков.

Использование REGEX в запросах

Чтобы использовать оператор REGEX, ваша таблица должна быть настроена с min_infix_len или min_prefix_len. Эта настройка может быть уже знакома, если вы используете поиск по подстроке. Новый оператор REGEX аналогичен продвинутому оператору подстановки. Например, REGEX(/t.?e/) соответствует любому термину, начинающемуся с ’t’, за которым следует любой символ и заканчивающемуся на ’e’. Это подчеркивает способность оператора обрабатывать разнообразные и сложные текстовые шаблоны, обеспечивая сложный подход к поисковым запросам.

Пример

Давайте предположим, что у нас есть такая таблица:

create table brands(name text) min_infix_len='2' charset_table='non_cjk, -'

select * from brands;
--------------

+---------------------+------------------------+
| id                  | name                   |
+---------------------+------------------------+
| 1515699435999330620 | SeaCrest Flower        |
| 1515699435999330621 | C-Crest Flour          |
| 1515699435999330622 | CCrest Flower          |
| 1515699435999330623 | Flower SeaCrest        |
| 1515699435999330624 | RightWrite Stationery  |
| 1515699435999330625 | WriteRight Stationery  |
| 1515699435999330626 | SoleSoul Footwear      |
| 1515699435999330627 | SoulSole Footwear      |
| 1515699435999330628 | PeakBeak Aviaries      |
| 1515699435999330629 | BeakPeak Aviaries      |
| 1515699435999330630 | GrateGreat Kitchenware |
| 1515699435999330631 | GreatGrate Kitchenware |
| 1515699435999330632 | Sunnyside Cyder        |
| 1515699435999330633 | SunnyCide Cyder        |
| 1515699435999330634 | ThymeTime Cooking      |
| 1515699435999330635 | TimeThyme Cooking      |
| 1515699435999330636 | KnightNight Security   |
| 1515699435999330637 | NightKnight Security   |
| 1515699435999330638 | PearPair Electronics   |
| 1515699435999330639 | PairPear Electronics   |
+---------------------+------------------------+
20 rows in set (0.00 sec)

Ранее, чтобы найти бренды SeaCrest Flower, C-Crest Flour и CCrest Flower, которые звучат похоже, запрос должен был быть исчерпывающим:

select * from brands where match('"SeaCrest flower"|"SeaCrest flour"|"CCrest flower"|"CCrest flour"|"C-Crest flower"|"C-Crest flour"');

С помощью нового оператора REGEX мы можем упростить этот запрос до:

select * from brands where match('"REGEX(/(c|sea).*crest/) REGEX(/flo(we|u)r/)"')
--------------

+---------------------+-----------------+
| id                  | name            |
+---------------------+-----------------+
| 1515699435999330620 | SeaCrest Flower |
| 1515699435999330621 | C-Crest Flour   |
| 1515699435999330622 | CCrest Flower   |
+---------------------+-----------------+
3 rows in set (0.00 sec)

Синтаксис RE2 и производительность

Оператор REGEX в Manticore Search соответствует синтаксису RE2 , известному своей высокой производительностью и безопасностью при обработке регулярных выражений. Разработанный Google, RE2 избегает распространённых проблем в обработке regex, таких как катастрофическое возвратное выполнение, что делает его эффективным и безопасным для различных приложений. Несмотря на мощность, использование оператора REGEX может повлиять на время поиска, особенно при сканировании больших словарей. Пользователям может понадобиться найти баланс между глубиной возможностей поиска и производительностью запросов. В ситуациях, требующих высокой производительности, упрощение шаблонов REGEX и применение дополнительных фильтров поиска может помочь сократить время поиска, сохраняя баланс между сложностью и эффективностью.

Заключение

Введение оператора REGEX в Manticore Search является примечательным шагом вперёд в возможностях полнотекстового поиска. Он повышает точность и уместность результатов поиска и открывает новые перспективы для обработки сложных запросов в различных областях, включая аналитику данных, академические исследования и поиск товарных знаков. Используя оператор REGEX, пользователи могут получить более высокий уровень эффективности и точности поиска, что делает Manticore Search ещё более мощным и универсальным инструментом в сфере полнотекстовых поисковых систем.

Установить Manticore Search

Установить Manticore Search