尝试在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*
查询结果
您遇到的问题不是由/
引起的,而是由查询和索引中的数据之间的大小写不匹配引起的。部分术语搜索,如您正在进行的正则表达式搜索,会自动小写。但是,您使用的关键字分析器不会将文本小写。这意味着在您的索引中,数据看起来像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": []
}
]
我用那个分析器和那个样本数据测试了你的查询,它们都使用那个分析器工作。