【问题标题】:Azure Cognitive Search, how to configure analyzer to support "startsWith"?Azure 认知搜索,如何配置分析器以支持“startsWith”?
【发布时间】: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


【解决方案1】:

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

Field1 (FROM) | Field2 (TO)

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

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

样品:

SOM
OME
STU
TUF
UFF
123

然后使用搜索:

SOM*

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

【讨论】:

  • 嗨,我更新了帖子。你是对的,我应该澄清一下,我不能更改任何数据,我只需要将整个值作为单个标记,这样我就可以运行任何与startsWith类似的工作。我知道这是一个很长的范围,但基本上与使用 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 得到的结果完全相同。
  • 即使您无法更改数据,您也可以创建一个单独的属性,其中包含具有不同分隔符的相同数据。例如。 some_id: 'SOME*STUFF*123' 和 some_id2: 'SOME||STUFF||123'。然后您搜索 some_id2,但您可以在前端呈现 some_id,因此看起来没有数据发生变化。
  • 我不明白,这将如何解决我的问题?我只想要startsWith,同时将特殊字符视为普通字符。没有分裂,什么都没有,只是整个字段的startsWith
  • 看看分词器和自定义分析器,它会解决你的需要。即使有正则表达式的支持,它也不会像我建议您解决您的需求那样执行。
猜你喜欢
  • 1970-01-01
  • 2022-12-17
  • 2021-10-04
  • 2021-03-06
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
相关资源
最近更新 更多