我在Azure认知搜索中有一个字段包含特殊字符。
它们看起来像这样:some_id:'一些 * 材料 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 on。我想说的是,举个JavaScript的例子,我希望得到与string.startsWith(value)完全相同的结果。
我猜要么是我的配置有问题,要么是我的请求有问题,有人能帮助我吗?
1条答案
按热度按时间5t7ly7z51#
恕我直言,您应该使用不同的分隔符。例如:
然后使用自定义分析器来拆分术语||。此外,您还可以使用tokenizer并指定它每3个字符执行一次。
样品:
然后使用以下搜索:
SOM*
并且它应该返回您要查找的数据。如果您能提供有关您的内容的更多详细信息并给予我们一些示例,那就更好了,但是这个答案应该会将您指向您要查找的结果。