目录
一、前言
最近项目需求,针对客户提出搜索引擎业务要做到自定义个性化,如输入简体或繁体能能够互相查询、有的关键词不能被分词搜索等等。为更好解决这些问题,“分词器”的原理和使用至关重要。
二、分词器原理
当 ES 自带的分词器不能满足需求的情况下,可以通过组合不同的 Character Filters,Tokenizer,Token Filter 来实现。
首先字符串经过字符过滤器(character filter),他们的工作是在分词前处理字符串。字符过滤器能够去除 HTML 标记,或者转化为“&”为“and”。
然后,分词器(tokenizer)被分词为独立的词【按照一定的规则,对字符串进行划分单词】。一个简单的分词器(tokenizer)可以根据空格或逗号将词语分开。
最后,每个词都通过分词过滤器(Token filter)【将切分的单词进行加工、大小写转换、删除stopwords、增加同义词等】,它可以修改词(例如将“Quick”转为小写),去掉词(例如停用词像“a”、“and”、“the”等等),或者增加词(例如同义词像“a”、“and”、“the”等等)或者增加词(例如同义词像“jump”和“leap”)。
1、常用分词器
Standard Analyzer:默认分词器,按词切分,小写处理
Simple Analyzer:按照非字母切分(符号被过滤),小写处理
Stop Analyzer:小写处理,停用词过滤器(the、a、is等)
Whitespace Analyzer:按照空格切分,不转小写
Keyword Analyzer:不分词,直接将输入当作输出
Patter Analyzer:正则表达式,默认\W+(非字符分割)
Language:提供了30多种常见语言的分词器
Customer Analyzer:自定义分词器
2、ik分词器模式
ik分词器拥有两种模式:ik_max_word和ik_smart。
ik_max_word模型会将文本做最细粒度的拆分,例如“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂”等词语。
ik_smart模型