如何在 Azure 搜索中搜索 #

How to search for # in Azure Search

你好,我有一个字符串字段,它有一个 nGram 分析器。

我们的查询是这样的。

$count=true&queryType=full&searchFields=name&searchMode=any&$skip=0&$top=50&search=/(.*)Site#12(.*)/

我们正在搜索的测试有 Site#123

以上查询适用于除 # 之外的所有其他字母数字字符。知道我怎样才能完成这项工作。

您的字符串正在被空格和标点符号标记化,例如 #。如果你想搜索 # 和其他标点符号,你可以考虑只用空格来分词。或者可能根本不应用任何标记化并将整个字符串视为单个标记。

如果您使用的是标准分词器,“#”字符已从索引文档中删除,因为它被视为分隔符。对于索引,您可以使用不同的分词器,例如空白分词器,或者使用映射字符过滤器将“#”字符替换为另一个字符,例如“_”(下划线“_”不被视为分隔符)。您可以使用 Analyze API 测试分析器行为:https://docs.microsoft.com/rest/api/searchservice/test-analyzer.

重要的是要知道正则表达式查询的查询词不会被分析。这意味着分析器不会从正则表达式中删除“#”字符。您可以在此处详细了解 Azure 搜索中的查询处理:How full text search works in Azure Search