Azure 认知搜索,如何配置分析器以支持“startsWith”?

时间:2021-01-26 08:34:01

标签: azure lucene azure-cognitive-search

我在 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
}

我得到零匹配。

使用标准分析器,我的正则表达式中有 \\* 后,我就开始不匹配(我用 \\ 转义了它们)

要求说明: 我无法更改任何数据,无法更改值(包括 \*)。我正在尝试将整个字段作为单个标记匹配,并让我运行 startsWith。

例如这个正则表达式:/SOME\\*ST(.*)/ 应该从字面上返回完全匹配正则表达式的条目。没有使用分隔符或令牌的魔法,只是将整个值作为一个令牌,我可以在其上运行 startsWith。 我想说的是,以 JavaScript 为例,我希望得到与 string.startsWith(value) 完全相同的结果。

我猜我的配置或我的请求有问题,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

恕我直言,您应该使用不同的分隔符。例如:

Field1 (FROM) | Field2 (TO)

SOME*STUFF*123  | SOME||STUFF||123 

然后使用自定义分析器在每个 || 中断行术语。此外,您还可以使用标记器并指定它每 3 个字符执行一次。

示例:

SOM
OME
STU
TUF
UFF
123

然后搜索使用:

SOM*

它应该返回您正在寻找的数据。如果您能提供有关您的内容的更多详细信息并向我们提供示例会更好,但此答案应该会指向您正在寻找的结果。