了解用于文本处理的分析器
分类: Azure搜索 ◆ 标签: #Azure #Search #认知搜索 ◆ 发布于: 2023-06-12 20:06:52

分析器是全文搜索的重要概念,它既可以用于生成索引,也可以用于分析用户输入的查询词,经过转换或者分解之后对新的查询词进行标记,并返回查询树,主要可能会有如下的操作:
- 删除非必须字和标点。
- 将短语和用连字符链接的词语拆分为组成部分
- 将大写单词转换为小写单词
- 将单词分解为词根用以提高存储效率,方便找到匹配项。
在使用C#的SDK的时候,分析器适用于被标记为"可搜索"的字段属性上,表示全文搜索。
例如:
[SearchableField(IsSortable = true)] public string HotelName { get; set; } [SearchableField(AnalyzerName = LexicalAnalyzerName.Values.EnMicrosoft)] public string Description { get; set; } [SearchableField(AnalyzerName = LexicalAnalyzerName.Values.FrLucene)] [JsonPropertyName("Description_fr")] public string DescriptionFr { get; set; }
而且它的类型还必须是Edm.String
。
注意
非全文搜索的查询类型,不会在查询阶段经历分析阶段。
默认的分析器
在查询中, Azure认知搜索服务分析器回自动调用标记为SearchableField
的所有字符串字段,所以必须记得起可搜索的字段必须是文本类型的。
Azure认知搜索服务默认使用Apache Lucene的标准分析器。Azure认知搜索服务一共提供了如下几种分析器:
- 标准的Lucene分析器:这个是默认的分析器。很通用,适合大多数的场景。
- 内置分析器: 内置分析器分语言和不限语言两种。如果需要为语言找到特定的分析器,您可以参考:https://docs.microsoft.com/zh-cn/azure/search/index-add-language-analyzers
- 自定义分析器: 必须包含一个
tokenzier
和可选的筛选器。
如何指定分析器
有两种办法:
- 在输入时用参数:
analyzer
来设置内置分析器,语言分析器,或者自定义的分析器,另外需要注意的是如果使用的是语言分析器,那么必须用analyzer
属性来进行设定。 - 设置属性
indexAnalyzer
和searchAnalyzer
, 设定好了这两个值之后, 属性analyzer
就需要设为null
什么时候添加分析器
一般建议开发阶段就加入分析器。
C#
实例
分配语言分析器, 直接看代码吧。
public partial class Hotel { . . . [SearchableField(AnalyzerName = LexicalAnalyzerName.Values.EnLucene)] public string Description { get; set; } [SearchableField(AnalyzerName = LexicalAnalyzerName.Values.FrLucene)] [JsonPropertyName("Description_fr")] public string DescriptionFr { get; set; } [SearchableField(AnalyzerName = "url-analyze")] public string Url { get; set; } . . . }