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

yjghlzjz  于 2022-11-07  发布在  Lucene
关注(0)|答案(1)|浏览(219)

我在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)完全相同的结果。
我猜要么是我的配置有问题,要么是我的请求有问题,有人能帮助我吗?

5t7ly7z5

5t7ly7z51#

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

Field1 (FROM) | Field2 (TO)

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

然后使用自定义分析器来拆分术语||。此外,您还可以使用tokenizer并指定它每3个字符执行一次。
样品:

SOM
OME
STU
TUF
UFF
123

然后使用以下搜索:
SOM*
并且它应该返回您要查找的数据。如果您能提供有关您的内容的更多详细信息并给予我们一些示例,那就更好了,但是这个答案应该会将您指向您要查找的结果。

相关问题