Lucene 具有特殊字符的认知搜索通配符搜索
我们使用认知搜索来满足搜索需求,我无法对具有特殊字符的字段进行通配符搜索 e、 例如,如果文档上的名称字段具有值-Lucene 具有特殊字符的认知搜索通配符搜索,lucene,full-text-search,azure-cognitive-search,full-text-indexing,Lucene,Full Text Search,Azure Cognitive Search,Full Text Indexing,我们使用认知搜索来满足搜索需求,我无法对具有特殊字符的字段进行通配符搜索 e、 例如,如果文档上的名称字段具有值-asdf,我可以使用搜索文本as*,并获取此文档 但是,如果此文档上此名称字段的值为!asdf,我无法使用通配符搜索它。我尝试使用术语进行搜索!作为*,\!作为*,和/\!作为*/。这只在我执行时有效!asdf 当字段中有特殊字符时,无法使通配符搜索工作。我使用的是查询类型full如果您查看完整Lucene模式的文档,您会发现感叹号(!)被视为特殊字符,必须用反斜杠转义 需要转义的
asdf
,我可以使用搜索文本as*
,并获取此文档
但是,如果此文档上此名称字段的值为!asdf
,我无法使用通配符搜索它。我尝试使用术语进行搜索!作为*
,\!作为*
,和/\!作为*/
。这只在我执行时有效!asdf
当字段中有特殊字符时,无法使通配符搜索工作。我使用的是查询类型
full
如果您查看完整Lucene模式的文档,您会发现感叹号(!)被视为特殊字符,必须用反斜杠转义
需要转义的特殊字符包括:+-&|!(){}[]^“~*?:\/
但是,如果您使用的话,这一点对任何属性都不起作用。您可以通过REST直接测试分析器。如果我们使用标准分析器分析字符串!asdf,我们会看到输出是asdf
如果要在索引中包含感叹号字符,则必须使用不带!-字符的分析器。有关为每个属性定义分析器的信息,请参阅
要找到合适的分析器,可以参考。在这里可以找到预配置分析器的列表。对于这种特殊情况,关键字分析器可以工作
将字段的整个内容视为单个标记。这非常有用
用于邮政编码、ID和某些产品名称等数据
我们可以上传两个测试项目进行测试。一个标题为“asdf”,另一个标题为“!asdf”
}
然后我们查询
\!as*
(注意转义的!字符)并按预期在结果中获取1个文档:
"@odata.count": 1,
"value": [
{
"@search.score": 1.0,
"Id": "2",
"Title": "!asdf"
}
\!as*
"@odata.count": 1,
"value": [
{
"@search.score": 1.0,
"Id": "2",
"Title": "!asdf"
}