Azure 搜索分析器/过滤器问题

问题描述

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

O-2011-006953 /4

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

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

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

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

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

更新

这里是字段的定义:

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

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

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

where query = "print" and parameters =

{
Facets = null,Filter = search.ismatch('/.*O.*/','accession_number','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
}

解决方法

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

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