Azure AI Search含连字符模糊搜索结果异常问题咨询
Azure AI Search带连字符搜索的注意事项
1. 先搞懂Standard Analyzer的分词逻辑
Lucene的Standard Analyzer会把字母中间的连字符当成分词分隔符,比如"ultra-wise"会被拆成"ultra"和"wise"两个单独的词存进索引,不会保留原有的"ultra-wise"这个完整词。这就导致:
- 直接搜"ultra-wise"(不加引号)时,实际是搜同时包含"ultra"和"wise"的文档,所以能返回结果;
- 要是加引号做短语搜索
"ultra-wise",因为索引里根本没这个完整短语,就会返回0结果。
2. 带连字符的模糊搜索得这么写
想让带连字符的词用模糊搜索生效,别直接给整个词加~,得拆开来:
- 把
ultra-wise~改成ultra~ wise~,对拆分后的每个词单独加模糊符; - 也可以在用户输入后做预处理,自动把连字符换成空格,再给每个词加~,不用让用户手动拆分。
3. 换分析器解决根本问题(可选)
如果业务必须把带连字符的词当成整体搜,可以换个分析器:
- 用
Keyword Analyzer:完全不分词,"ultra-wise"会被当成单个词存索引,这时候ultra-wise~就能直接搜到,但代价是没法单独搜"ultra"或者"wise"了; - 自定义分析器:比如用字符过滤器把连字符换成别的符号,或者调整分词规则,让连字符不被拆分,不过这个需要额外配置。
4. 别踩短语模糊搜索的坑
要是试着重用引号加模糊符,比如"ultra-wise"~,结果还是0,因为索引里没有这个完整短语。这种写法只适合那些索引里本来就存了完整带连字符短语的场景,而Standard Analyzer默认不会生成这种短语。
内容的提问来源于stack exchange,提问作者ban_ana
相关产品推荐
相关产品推荐

