【发布时间】: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