【发布时间】:2021-04-30 01:03:10
【问题描述】:
我在 Azure 认知搜索中有一个包含特殊字符的字段。
它们看起来像这样: some_id: 'SOME*STUFF*123'
我正在尝试进行“startsWith”查询,但是只要正则表达式尝试匹配任何比 \* 更远的内容,它就不会返回任何内容
谷歌了一下后,我发现了它的分析器,可能会在“*”处分解字符串
因此,我将分析器更改为“关键字”,因为我多次阅读了您应该用于此的分析器。
新配置如下所示:
{
"name": "some_id",
"type": "Edm.String",
"facetable": false,
"filterable": true,
"key": false,
"retrievable": true,
"searchable": true,
"sortable": true,
"analyzer": "keyword",
"indexAnalyzer": null,
"searchAnalyzer": null,
"synonymMaps": [],
"fields": []
},
我的请求如下所示:
{
"count": true,
"skip": 0,
"top": 5,
"searchMode": "any",
"queryType": "full",
"search": "some_id:/SO(.*)/" // SOME\\*S(.*) also doesnt work
}
我得到零匹配。
使用 Standart 分析器,只要我的正则表达式中有 \\*(我用 \\ 转义它们),我就开始不匹配了
需求说明: 我无法更改任何数据,无法更改值(包括 \*)。我正在尝试将整个字段匹配为单个标记,并让我运行startsWith on。
例如,这个正则表达式:/SOME\\*ST(.*)/ 应该从字面上返回与正则表达式完全匹配的条目。分隔符或标记没有魔法,只需将整个值作为一个标记,我可以在startsWith 上运行。
我想说的是,以 JavaScript 为例,我想要从 string.startsWith(value) 获得的完全相同的结果。
我猜我的配置有问题,或者我的请求有问题,有人可以帮助我吗?
【问题讨论】:
-
您要检查以
some_id:之后的文本开头吗? -
什么意思? some_id 是字段名, SOME*STUFF*123 是索引中大多数值的格式
标签: azure lucene azure-cognitive-search