首页 > 解决方案 > Azure 认知搜索:如何正确搜索某些单字符值

问题描述

在 Azure 搜索中,我有一个包含一批文档的索引。文档是 JSON,其中一个文档具有以下字段(节略):

{
  "id": "1638",
  "segment": "N",
  "segmentIndicator": 1.23,     
}

以及其他一些segment存在但为空的文档。

如链接中所述,我使用 POST 发出搜索请求。我得到了有效的结果idsegmentIndicator使用了类似的请求

{
    "search": "id:(\"1638\")",
    "queryType": "full",
    "searchMode": "all"
}
or
{
    "search": "segmentIndicator:(\"1.23\")",
    "queryType": "full",
    "searchMode": "all"
}

因为他们都返回所需的文件,没有别的。我无法更改queryTypesearchMode并且需要与我的搜索条件完全匹配(无模糊/邻近搜索)。

然而,当我说

{
    "search": "segment:(\"N\")",
    "queryType": "full",
    "searchMode": "all"
}

我得到一个空的搜索结果,而我希望找到相同的文档。如何更改查询以便通过segment参数正确找到文档?

标签: azureazure-cognitive-search

解决方案


虽然我不确定为什么单个字母不匹配,但我推测它可能被视为停用词并在查询的词法分析期间被消除。该search参数最适合用于真正的全文搜索场景。

听起来您需要的是$filter参数,它是一个严格的布尔谓词,它对字段值进行精确(区分大小写)匹配,包括所有数据类型的值(不仅仅是字符串)。您可以在此处找到有关 Azure 认知搜索中筛选器的良好介绍。完整的语法参考在这里

以下是如何过滤字符串字段以与“N”完全匹配的示例:

segment eq 'N'

推荐阅读