c# - 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”查询的其余部分。
解决方案
当您发送查询时,所有可搜索字段的分析器都会对其进行分析,然后将对所有可搜索字段执行标记化查询(每个字段不同)。
您可以将查询发送到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
参数指定它们。
推荐阅读
- c# - .net 核心应用程序中 ServicePointManager.DefaultConnectionLimit 的最高安全数是多少?
- string - Jenkins - 如何将 ${WORKSPACE} 与字符串文字连接起来?
- django - 每次在 Django 中触摸对象时,将递增整数添加到查询集
- asp.net-core - .NET Core Razor Pages 数据绑定与表单提交的部分视图
- ruby - Windows 10 上的 Ruby sqlite3 gem 安装问题
- android - 构建发布和调试 apk 时未找到 Firebase Auth AndroidX 依赖项
- c++ - 热路径的分析和 std::vector 部分?
- postgresql - pgAdmin4:如何让我的所有 Heroku Postgres 数据库显示在 pgAdmin 中?
- active-directory - 更改 Active Directory 2003 中的登录名
- smarty - smarty3模板引擎中如何使用include