提问者:小点点

在azure认知搜索中对具有“/”特殊字符的字段进行部分术语搜索


尝试在Azure搜索中搜索具有“/”特殊字符的字段时,我发现了一些问题。

我在下面列出了我尝试过的查询,因此寻求帮助以解决问题。

有一个名为CustomProperty的字段,带有关键字分析器,因此该字段不会在特殊字符上进行标记。

使用关键字分析器自定义属性

自定义属性的值是object tId/70efb434-40c4-4314-a53c-179700480ca8

搜索=/.*对象。*70ef。*/

查询结果

search=/.*70efb434-40c4-4314-a53c-179700480ca8.*/

查询结果

开始接近“/”查询不起作用,而“object.*”查询在上面起作用。search=/.*object tI.*70ef.*/

查询结果

search=/.*对象I.*/

查询结果

search=/.*object tId\/70efb4.*/

查询结果

简单(不是完整的Lucene)也不起作用search=object tId\/70efb4*

查询结果


共1个答案

匿名用户

您遇到的问题不是由/引起的,而是由查询和索引中的数据之间的大小写不匹配引起的。部分术语搜索,如您正在进行的正则表达式搜索,会自动小写。但是,您使用的关键字分析器不会将文本小写。这意味着在您的索引中,数据看起来像object tId,但您的查询会自动小写为object tid。这种不匹配导致您的查询不返回结果。这里有更多细节:https://learn.microsoft.com/azure/search/search-query-partial-matching

对于您的用例,我推荐以下分析器:

"analyzers": [
        {
            "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
            "name": "custom-keyword",
            "tokenizer": "keyword_v2",
            "tokenFilters": [
                "lowercase"
            ],
            "charFilters": []
        }
    ]

我用那个分析器和那个样本数据测试了你的查询,它们都使用那个分析器工作。