我们正在使用认知搜索来满足搜索要求,但我无法在具有特殊字符的字段上进行通配符搜索。
例如,如果文档上的名称字段具有值-asdf
,则可以使用搜索文本as*
来获取此文档。
但是,如果此文档上此名称字段的值为!asdf
,则无法使用通配符进行搜索。我尝试使用术语!as*
,\!as*
和/\!as*/
进行搜索。这仅在我执行!asdf
时有效。
当字段中有特殊字符时,无法使通配符搜索起作用。我正在使用查询类型full
答案 0 :(得分:0)
如果查看Full Lucene模式的文档,您会发现感叹号(!)被认为是特殊字符,必须用反斜杠转义。
https://docs.microsoft.com/en-us/azure/search/query-lucene-syntax#escaping-special-characters
需要转义的特殊字符包括:+-&| ! (){} [] ^“〜*?:\ /
但是,如果您使用Default analyzer,那么仅此一项将不适用于任何属性。您可以直接通过REST测试分析仪。如果使用标准分析器分析字符串!asdf ,则会看到输出为 asdf 。
"tokens": [
{
"token": "asdf",
"startOffset": 1,
"endOffset": 5,
"position": 0
}
]
如果要在索引中包含感叹号,则必须使用不剥离!字符的分析器。有关为每个属性定义分析器的信息,请参见How to specify analyzers。
要找到合适的分析仪,可以参考Predefined Analyzers Reference。在这里,您会找到预配置分析仪的列表。在这种情况下,关键字分析器将起作用。
将字段的全部内容作为单个标记处理。这很有用 邮政编码,ID和一些产品名称之类的数据。
我们可以通过上传两个测试项目进行测试。一个标题为“ asdf”,另一个标题为“!asdf”。
{
"value": [
{
"@search.action": "mergeOrUpload",
"Id": "1",
"Title": "asdf"
},
{
"@search.action": "mergeOrUpload",
"Id": "2",
"Title": "!asdf"
}
]
}
然后我们查询
\!as*
(注意转义的!字符),并按预期结果获得1个文档:
"@odata.count": 1,
"value": [
{
"@search.score": 1.0,
"Id": "2",
"Title": "!asdf"
}