具有特殊字符的认知搜索通配符搜索
Cognitive search wild card search with special characters
我们正在使用认知搜索来满足搜索要求,但我无法在具有特殊字符的字段上进行通配符搜索。
例如,如果文档中的名称字段具有值 - asdf
,我可以使用搜索文本 as*
并获取此文档。
但是,如果此文档中此名称字段的值为 !asdf
,我将无法使用通配符进行搜索。我尝试使用术语 !as*
、\!as*
和 /\!as*/
进行搜索。这仅在我执行 !asdf
.
时有效
当字段中有特殊字符时,无法使用通配符搜索。我正在使用查询类型 full
如果您查看 Full Lucene 模式的文档,您会发现感叹号 (!) 被视为特殊字符,必须使用反斜杠进行转义。
https://docs.microsoft.com/en-us/azure/search/query-lucene-syntax#escaping-special-characters
Special characters that require escaping include the following: + - & | ! ( ) { } [ ] ^ " ~ * ? : \ /
但是,如果您使用 Default analyzer,仅此一项对任何 属性 都不起作用。您可以直接通过 REST 测试分析器。如果我们使用标准分析器分析字符串 !asdf,我们会看到输出是 asdf.
"tokens": [
{
"token": "asdf",
"startOffset": 1,
"endOffset": 5,
"position": 0
}
]
如果您希望感叹号包含在您的索引中,您必须使用不去除 ! 字符的分析器。有关根据 属性.
定义分析器的信息,请参阅 How to specify analyzers
要找到合适的分析器,可以参考Predefined Analyzers Reference。在这里您会找到预配置分析器的列表。对于这种特殊情况,关键字分析器将起作用。
Treats the entire content of a field as a single token. This is useful
for data like zip codes, IDs, and some product names.
我们可以通过上传两个测试项目来进行测试。一个标题为“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"
}
我们正在使用认知搜索来满足搜索要求,但我无法在具有特殊字符的字段上进行通配符搜索。
例如,如果文档中的名称字段具有值 - asdf
,我可以使用搜索文本 as*
并获取此文档。
但是,如果此文档中此名称字段的值为 !asdf
,我将无法使用通配符进行搜索。我尝试使用术语 !as*
、\!as*
和 /\!as*/
进行搜索。这仅在我执行 !asdf
.
当字段中有特殊字符时,无法使用通配符搜索。我正在使用查询类型 full
如果您查看 Full Lucene 模式的文档,您会发现感叹号 (!) 被视为特殊字符,必须使用反斜杠进行转义。
https://docs.microsoft.com/en-us/azure/search/query-lucene-syntax#escaping-special-characters
Special characters that require escaping include the following: + - & | ! ( ) { } [ ] ^ " ~ * ? : \ /
但是,如果您使用 Default analyzer,仅此一项对任何 属性 都不起作用。您可以直接通过 REST 测试分析器。如果我们使用标准分析器分析字符串 !asdf,我们会看到输出是 asdf.
"tokens": [
{
"token": "asdf",
"startOffset": 1,
"endOffset": 5,
"position": 0
}
]
如果您希望感叹号包含在您的索引中,您必须使用不去除 ! 字符的分析器。有关根据 属性.
定义分析器的信息,请参阅 How to specify analyzers要找到合适的分析器,可以参考Predefined Analyzers Reference。在这里您会找到预配置分析器的列表。对于这种特殊情况,关键字分析器将起作用。
Treats the entire content of a field as a single token. This is useful for data like zip codes, IDs, and some product names.
我们可以通过上传两个测试项目来进行测试。一个标题为“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"
}