我正在尝试配置 Azure 搜索以查找一些具有特殊字符的字符串,例如 美国广播公司*德国
当我使用"ABC*DEF"
查找完整术语时,它运行良好。
如果我想使用正则表达式术语,问题就来了:
- 当我使用部分术语时,例如
/(.*)ABC(.*)/
,结果没有问题 - 当我使用部分术语时,例如
/(.*)DEF(.*)/
,结果没有问题 - 但是当我试图寻找类似
/(.*)C*D(.*)/
的东西时,结果是空的。
我使用的是标准分析仪。我也尝试了关键字分析器,但这样正则表达式搜索根本不起作用。
有什么建议吗?
您将无法使用标准分析器创建与 ABC*DEF 匹配的正则表达式。
如果使用"标准"分析器通过分析器 api 运行"ABC*DEF"
,您将看到ABC*DEF
在索引时分为 2 个令牌 ->"ABC"
和"DEF"
。不会分析正则表达式,但是,它们需要匹配索引中存在的令牌。
由于索引中不存在ABC*DEF
(仅存在"ABC"和"DEF"(,因此无法使用要搜索的表达式找到它。
使用"关键字"分析器会将整个字段保留为单个标记,因此,如果字段"仅"包含表达式ABC*DEF
,则正则表达式将对其进行处理,但是,如果ABC*DEF
是较大文本段落的一部分,那么这可能不是您想要使用的。
最好的办法是创建自定义分析器,以保留与您的用例相关的特殊字符的方式标记文本。
如果您正在寻找特殊字符,为什么不丢弃普通字符?
[^w]