首页 > 解决方案 > Azure 认知搜索 - 匹配某些字段的确切短语

问题描述

我的 Azure 认知搜索中有不同的字段,但让我向您展示一些我遇到的问题。

{
   "name": "Name",
   "type": "Edm.String",
   "searchable": true,
   "filterable": false,
   "retrievable": true,
   "sortable": true,
   "facetable": false,
   "key": false,
   "indexAnalyzer": null,
   "searchAnalyzer": null,
   "analyzer": "standard.lucene",
   "synonymMaps": []
}

{
    "name": "Code",
    "type": "Edm.String",
    "searchable": true,
    "filterable": false,
    "retrievable": true,
    "sortable": false,
    "facetable": false,
    "key": false,
    "indexAnalyzer": null,
    "searchAnalyzer": null,
    "analyzer": "keyword",
    "synonymMaps": []
}

正如您在上面看到的,对于名称,我设置了分析器 standard.lucene(对于其他字段,例如 NameEn,我有特定于语言的)和代码字段的关键字分析器。

例如,当我按 1-1 搜索时,它会查找 1 而不是 1-1。我尝试使用双引号,但似乎我也不起作用(“1-1”)。

问题是,结果我得到了数字 1 的名称,而不是 1-1 的代码。

你知道我该怎么做吗?我想我应该搜索整个短语,例如:“1-1”查询的其余部分。

标签: c#azure-cognitive-search

解决方案


当您发送查询时,所有可搜索字段的分析器都会对其进行分析,然后将对所有可搜索字段执行标记化查询(每个字段不同)。

您可以将查询发送到analyze端点以调试每个分析器如何处理您的查询 - https://serviceName.search.windows.net/indexes/index-name/analyze?api-version=2020-06-30

在你的情况下:

{
    "text": "1-1",
    "analyzer": "standard"
}

Name为字段返回这些标记

 "tokens": [
        {
            "token": "1",
            "startOffset": 0,
            "endOffset": 1,
            "position": 0
        },
        {
            "token": "1",
            "startOffset": 2,
            "endOffset": 3,
            "position": 1
        }
    ]

Code领域

{
    "text": "1-1",
    "analyzer": "keyword"
}

你得到

"tokens": [
        {
            "token": "1-1",
            "startOffset": 0,
            "endOffset": 3,
            "position": 0
        }
    ]

因此,通过这样的查询,您实际上是在寻找与

Name=1 | Code=1-1

如果您只想在选定的字段中搜索,您可以使用searchFields参数指定它们。


推荐阅读