【问题标题】:Azure Cognitive Search: how to correctly search for certain one-char valueAzure 认知搜索:如何正确搜索某些单字符值
【发布时间】:2020-08-20 14:57:08
【问题描述】:

在 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\")",
    "queryType": "full",
    "searchMode": "all"
}

因为它们都返回所需的文档而没有其他任何东西。我无法更改 queryTypesearchMode 并且需要与我的搜索条件完全匹配(无模糊/邻近搜索)。

但是,当我说

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

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

【问题讨论】:

  • 您对段字段使用什么分析器(如果有)?此外,即使大小写不匹配,您是否需要在段上匹配(例如——“n”和“N”都应该匹配)?如果区分大小写的完全匹配没问题,为什么不使用过滤器?
  • @BruceJohnston - 我只是按原样发送此查询。我对这项服务很陌生,所以不知道如何查看/使用分析仪 atm。我相信我需要完全匹配,区分大小写。

标签: azure azure-cognitive-search


【解决方案1】:

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

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

这是一个示例,说明如何过滤字符串字段以与 'N' 完全匹配:

segment eq 'N'

【讨论】:

  • 使用 eq 是最好的方法。为了清楚起见,删除了我之前的建议。
猜你喜欢
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 2021-10-18
  • 2020-10-15
  • 2022-11-03
  • 1970-01-01
  • 2021-06-06
相关资源
最近更新 更多