更新时间:2020-10-28 11:38
分词是搜索引擎中一个基础但重要的组件,分词的结果直接影响搜索效果。由于业务场景的多样,同一个短语在不同的业务、不同的语境下,其语义可能会不一样,期望分词的结果也不一样。为此,OpenSearch除了提供面向通用领域的基础分析器外,还提供了面向特定领域的分析器,如面向电商领域的电商分析器等。为了更好的满足用户的业务需求,OpenSearch可以让用户在系统提供的基础分析器的基础上,通过结合干预词条的形式创建自定义分析器。在应用的索引字段的分析器中选择使用相应的分析器,以达到干预索引和查询时分词结果,确保搜索结果的质量。
这类干预词条主要用于一些系统尚未识别的实体词,干预后,该词的切分总是能保持一致,不受其所在的上下文影响。
词条格式:
实体词1
实体词2
示例:
分词器
开放搜索
干预后,“分词器”和“开放搜索”不管出现什么样的上下文中,都会被当做独立的语义实体,系统对它们还会进一步切分,例如:“分词器”可能会保留原词,而“开放搜索”可能会被进一步切分成“开放“和“搜索”两个更细粒度的词。
这种类型的干预词条用于指定在特定上下文中的短语的切分方式,而不影响该短语在其他上下文中的切分方式。
词条格式:
短语 => 短 语
示例:
语义切分干预词条 => 语义 切分 干预词条
干预后,当语句中完整的出现短语“语义切分干预词条”时,系统首先会按照词条对其切分成“语义”、“切分”和“干预词条”三个子短语,然后对子短语分别进行更细粒度的切分。这样可以确保在查询“语义”或者“切分”和“干预词条”等子短语时能召回改文档。
新控制台自定义分析器的个数最多为20个;
语义切分干预词条中,key和value在去掉空格后,内容需相同;示例如下:
不正确的词条 => 错误 的 词条
正确的词条 => 正确 的 词条
第1个词条中,key和value去掉空格后,内容不一致,因此是不符合规范的词条。
key中不能包含有空格;示例如下:
不正确 词条 => 不 正确 词条
正确词条 => 正确 词条
第1个词条,key中包含了空格(“ “),因此是不符合规范的词条。
key的内容不能为同一个干预词典中其他词条value中的一部分;示例如下:
自定义分词器 => 自定义 分词器
分词器
分词
第2个词条的key的内容“分词器”,是第1个词条value中的一部分,因此第2个词条是不符合规范的。但第3条词条是符合规范的。
创建自定义分析器 —— 线下变更 —— 索引重建 —— 自定义分词器效果展示
1.在开放搜索控制台主页左侧导航栏找到“功能扩展”,选择“分析器管理”,点击【创建】:
2.创建分析器,定义分析名称,选择分析器类型:
3.添加干预词条,输入query,和分词结果,这里以“糯米”为例,并选择二次分词:
注意:分词用空格隔开。例:“糯米” ==> “糯 米”。
4.进行分词测试,测试分词器生效后干预词条的结果:
5.分词效果测试后,回到“召回配置”下的“基本配置”,对线上应用进行变更:
注:此处的“线下变更”,是根据用户当前的配置生成一个线下应用,线上应用不受影响。
6.在应用字段列表,分析方式一列中,给对应的索引选择自定义分析器:
7.等待索引重建后,生效:
以“糯米”的文档内容为例,当使用“中文——通用分词时” 与预期不符(搜索“米”无法将带有“糯米、小米、大米”的文档召回),如图:
按上述流程添加“test_zw”自定义分词器,并修改应用结构,索引重建后,拆分的term与干预后一致,如图:
在文档使用中是否遇到以下问题
更多建议
匿名提交