Azure认知搜索:如何正确搜索某些一字符值

问题描述

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

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

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

我发出了search request using POST,as described under the link。使用类似的请求

,我获得了idsegmentIndicator的有效结果
{
    "search": "id:(\"1638\")","queryType": "full","searchMode": "all"
}
or
{
    "search": "segmentIndicator:(\"1.23\")","searchMode": "all"
}

,因为它们都返回所需的文档,而没有其他内容。我无法更改queryTypesearchMode,因此需要与我的搜索条件完全匹配(无需模糊/接近搜索)。

但是,当我说

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

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

解决方法

虽然我不确定为什么单个字母不匹配,但我推测它可能被当作停用词,并且在查询的词法分析中被消除了。 search参数最适合用于真正的全文搜索方案。

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

这是一个如何过滤字符串字段以使其与“ N”完全匹配的示例:

segment eq 'N'