当搜索包含特殊字符时,Azure 搜索服务筛选器 search.ismatch() 未返回正确结果

Posted

技术标签:

【中文标题】当搜索包含特殊字符时,Azure 搜索服务筛选器 search.ismatch() 未返回正确结果【英文标题】:Azure Search Service filter search.ismatch() not returning correct result when search contains special characters 【发布时间】:2022-01-09 19:26:55 【问题描述】:

我在 Azure 搜索服务的过滤器中使用 search.ismatch(),当我的搜索词包含特殊字符(如 [-,&,;])时,它不会给出正确的结果。以下是详细内容

调用的函数是search.ismatch('knet-q&a','fieldName','full','all') 在这里,我使用的是标准的 lucene 分析器,当返回结果时,它返回的结果除了具有 knet 之外,我希望它应该返回包含所有三个术语(knet、q、a)的结果。似乎只要看到一个特殊字符 azure 就会忽略其余字母,只返回具有 knet 术语的结果。

几个问题

    这是上述正确行为还是 azure 返回结果方式中的错误 如果我使用客户分析器或关键字分析器进行过滤,请考虑在查询处理或类似分析器时不会考虑,因为它是过滤器而不是搜索词 如果在查询处理期间考虑使用分析器,最好使用关键字分析器,它会在索引和搜索期间保留所有特殊字符,我可以传递正则表达式来匹配特殊字符

提前致谢

谢谢 普拉提克

【问题讨论】:

【参考方案1】:

1-据我所知是正确的。默认分析器会删除特殊字符。

2-您可以创建自定义分析器或使用不删除特殊字符的分析器,您只需要重新索引内容。

3-分析器将在索引时工作。

【讨论】:

以上是关于当搜索包含特殊字符时,Azure 搜索服务筛选器 search.ismatch() 未返回正确结果的主要内容,如果未能解决你的问题,请参考以下文章

最新的Azure SQL数据库实例中的Azure搜索服务与全文搜索?

使用特殊字符搜索单元格值时 VLOOKUP 的 Excel VBA 替代方案

PHP preg_grep -> 搜索词包含特殊字符的搜索数组

当Series包含字符串时,为啥`in`不搜索值

当不是正在搜索的每一行都包含 JSON 时,如何使用 SQL 查询在 JSON 字符串中搜索?

Azure的搜索:rotationFromOriginal不正确填充