【问题标题】:Azure search Analyzer/Filter issuesAzure 搜索分析器/筛选器问题
【发布时间】:2021-09-02 15:27:22
【问题描述】:

我有一个复杂的标识符字段,其中包含字母、数字、空格和特殊字符。我一直在此字段上使用关键字分析器,但在过滤结果时遇到问题。以下是该字段将包含的数据示例:

O-2011-006953 /4

使用关键字分析器,我可以使用数字而不是字母对索引字段进行包含过滤器。以下过滤器有效:

search.ismatch('/.*2011.*/', 'complex_identifier_field', 'full', 'all')

但如果我尝试使用字母进行包含搜索,则会得到 0 个结果:

search.ismatch('/.*O.*/', 'complex_identifier_field', 'full', 'all')

我相信我的问题是我需要另一个或自定义分析器,我最近尝试使用 NGram 分析器,并尝试使用关键字标记器编写自定义分析器,但仍然无法在该字段上进行包含搜索。如何创建一个作为一个标记的字段;接受字母数字字符、空格和特殊字符;并允许我做一个包含过滤器来查找标识符字段的任何部分?

更新

这是字段的定义:

new Field("accession_number", DataType.String){ IsSearchable= true, IsFilterable = true, Analyzer = AnalyzerName.Keyword },

这是我正在使用的确切搜索:

var result = indexClient.Documents.Search(query, searchParameters: parameters);

其中查询 =“打印”和参数 =

{
Facets = null,
Filter = search.ismatch('/.*O.*/', 'accession_number', 'full', 'all'),
HighlightFields = null,
HighlightPostTag = null,
HighlightPreTag = null,
IncludeTotalResultsCount = true,
MinimumCoverage = null,
OrderBy = null,
QueryType = Full,
ScoringParameters = null,
ScoringProfile = null,
SearchFields = null,
SearchMode = All,
Select = (9 fields),
Skip = 0,
Top = 50
}

【问题讨论】:

  • 感谢您更新更多详细信息。我看不出有什么不对。为了进一步了解这一点,这将有助于查看:1) 用于索引定义的 JSON(您可以从 Azure 门户获取它,转到索引并有一个用于 JSON 的选项卡),2) 用于文档的 JSON应该匹配但不匹配(您可以为此使用门户中的查询资源管理器),以及 3) 失败的查询,直接在门户查询资源管理器中完成,而不是通过 API。在故障排除时尝试删除图层。

标签: azure-cognitive-search azure-search-.net-sdk


【解决方案1】:

在您的示例中,值 O-2011-006953 /4 与正则表达式 /.O./ 不匹配,因为正则表达式需要在“O”之前有一个字符(“.”表示“该位置正好有 1 个字符”)。如果要匹配标记内任何位置的子字符串,可以使用/.*O.*/,其中“O”是子字符串,“。”表示“任何字符”,“*”表示“前一个元素的零个或多个,在本例中为“.”。

请注意,这种类型的正则表达式搜索可能会很慢,并且不能保证完全召回(即,我们可能不会返回所有可能与正则表达式匹配的文档,我们会限制从正则表达式扩展的术语数量)。

【讨论】:

  • 感谢您的回复。我实际上使用/.*O.*/ 作为正则表达式。我认为 Stack Overflow 可能已经删除了我原始帖子中的星星(可能是因为我没有将它们包含在代码块中)。所以我相信我使用的正则表达式应该已经找到了文档。我不确定这是否有区别,但我没有在搜索中使用正则表达式,只使用过滤器。使用包含搜索过滤搜索结果的推荐方法是什么? (用户在搜索后输入文本以过滤结果)
  • 我刚刚尝试了这个场景(关键字分析器,正则表达式扩展字符串的开头,使用 search.ismatch())并且它有效。我想知道我们是否遗漏了另一个区别。您可以使用索引定义(至少是该字段的定义)和您发出的确切完整请求来更新问题吗?
猜你喜欢
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 2018-02-27
  • 2020-06-14
相关资源
最近更新 更多