Введение
Продвинутый полнотекстовый поиск в поисковых системах является ключевым для повышения точности и уместности результатов поиска. Это особенно критично в таких областях, как анализ патентов, рецензирование контрактов, идентификация положений и поиск товарных знаков, где точность функционала поиска имеет решающее значение. Прогресс 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 ещё более мощным и универсальным инструментом в сфере полнотекстовых поисковых систем.