当我试图在Azure搜索中搜索一个具有“/”特殊字符的字段时,我看到了一些问题。
我列出了我在下面尝试过的问题,所以我在寻找解决问题的帮助。
有一个名为CustomProperty和关键字分析器的字段,因此该字段不会在特殊字符上被标记。
CustomPropertyWithKeywordAnalyzer
customProperty的值是objectId/70efb434-40c4-4314-a53c-179700480ca8
search=/.*object.*70ef.*/&queryType=full&searchFields=customProperty 查询工作
search=/.*70efb434-40c4-4314-a53c-179700480ca8.*/&queryType=full&searchFields=customProperty 查询工作
开始接近“/”查询不工作,而“object.*”查询在上面工作。search=/.*objectI.*70ef.*/&queryType=full&searchFields=customProperty 不工作
search=/.*objectI.*/&queryType=full&searchFields=customProperty 不工作
search=/.*objectId\/70efb4.*/&queryType=full&searchFields=customProperty https://learn.microsoft.com/en-us/azure/search/search-query-partial-matching#about-partial-term-search说要逃跑,但这也行不通。不工作
简单(不是完全-lucene)也不工作 search=objectId\/70efb4*&searchFields=customProperty
发布于 2022-01-25 01:32:02
您遇到的问题不是由/引起的,而是由于查询和索引中的数据之间的大小写不匹配造成的。部分术语搜索,像正在执行的regex搜索一样,会自动降低。然而,他们的关键字分析器你使用的不是小写文本。这意味着,在索引中,数据看起来像objectId,但是查询会自动降低到objectid。这种不匹配是导致查询不返回结果的原因。这里有更多的详细信息: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": []
}
]我用分析器和样本数据测试了您的查询,它们都使用该分析器工作。
https://stackoverflow.com/questions/70837032
复制相似问题