blog-post

使用 Manticore Search 的 REGEX 运算符进行高级全文匹配

引言

搜索引擎中的高级全文匹配是增强搜索结果准确性和相关性的关键。这在专利分析、合同审查、条款识别和商标搜索等领域尤为重要,因为在搜索功能中的准确性至关重要。Manticore Search 从简单的 <code>REGEX()</code> 函数发展到自 6.3.0 以来的全文 REGEX 运算符,是这一背景下的重要发展,提供了查询中的复杂且细致的模式匹配。

新的 REGEX 运算符 对于复杂的搜索场景尤为有益。例如,在数据分析平台中,它可以搜索日志文件或代码库中的特定模式,识别独特的错误代码或编程结构。在学术研究数据库中,它使研究人员能够找到具有特定引用样式或书目参考模式的出版物。此外,在商标搜索中,REGEX 运算符在寻找精确或相似商标时非常宝贵,考虑到商标文本的多样性和复杂性。

在查询中使用 REGEX

要使用 REGEX 运算符,您的表需要配置 min_infix_lenmin_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 FlowerC-Crest FlourCCrest 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 语法和性能

Manticore Search 中的 REGEX 运算符 遵循 RE2 语法 ,因其高性能和安全性而著称,用于处理正则表达式。RE2 由谷歌开发,避免了正则表达式处理中的常见陷阱,如灾难性回溯,使其在各种应用中高效且安全。虽然强大,REGEX 运算符的使用可能影响搜索时间,特别是在扫描大型字典时。用户可能需要在搜索能力的深度与查询性能之间找到平衡。在性能关键的情况下,简化 REGEX 模式并采用其他搜索过滤器可以帮助减少搜索时间,从而保持复杂性与效率之间的平衡。

结论

Manticore Search 中引入的 REGEX 运算符 标志着全文搜索能力的重要进步。它提高了搜索结果的精准性和相关性,并为各个领域的复杂查询处理开辟了新的途径,包括数据分析、学术研究和商标搜索。通过利用 REGEX 运算符,用户可以访问更高水平的搜索效率和准确性,使 Manticore Search 在全文搜索引擎领域成为更强大和多功能的工具。

安装Manticore Search

安装Manticore Search