引言
搜索引擎中的高级全文匹配是提高搜索结果准确性和相关性的关键。这在专利分析、合同审查、条款识别和商标搜索等领域尤为重要,因为搜索功能的精确性至关重要。Manticore Search 从简单的 <code>REGEX()</code> 函数发展到自 6.3.0 以来可用的全文 REGEX 操作符,是这一背景下的重要发展,提供了查询中复杂和细致的模式匹配。
新的 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 语法和性能
Manticore Search 中的 REGEX 操作符 遵循 RE2 语法 ,以其高性能和安全性著称。RE2 由 Google 开发,避免了正则表达式处理中的常见陷阱,如灾难性回溯,使其在各种应用中高效且安全。虽然功能强大,但 REGEX 操作符的使用可能会影响搜索时间,尤其是在扫描大型字典时。用户可能需要在搜索能力的深度和查询性能之间找到平衡。在性能关键的情况下,简化 REGEX 模式并使用额外的搜索过滤器可以帮助减少搜索时间,从而在复杂性和效率之间保持平衡。
结论
Manticore Search 中 REGEX 操作符 的引入标志着全文搜索能力的显著进步。它提高了搜索结果的精确性和相关性,并为各个领域的复杂查询处理开辟了新的途径,包括数据分析、学术研究和商标搜索。通过利用 REGEX 操作符,用户可以获得更高水平的搜索效率和准确性,使 Manticore Search 在全文搜索引擎领域成为一个更强大和多功能的工具。
