主题
什么是分词
分词是将文本转换成一系列单词的过程,也可以叫做文本分析,在ES中被称为Analysis。其实在日常生活中,分词这个概念我们应该并不陌生,比如我们使用百度/谷歌搜索引擎进行检索的时候,我们常常可以发现,我们输入的一段句子会被分割成不同的关键词关联查询。
自带的分词器
对语句进行分词的前提是定义了分词的规则。ES中为我们提供了许多功能强大、场景丰富的分词器组件,英文是Analyzer,它的组成如下:
Character Filter
- 针对原始的文本进行处理,比如去除html标记
Tokenizer
- 将原始的文本按照一定的规则切分为单词
Token Filter
- 针对tokenizer处理的单词进行再加工,比如转小写、删除或新增等处理 我们可以看到分词器可以由三种组件组成,原始的数据流从Character Filter -> Tokenizer -> Token Filter一路下来,可以一步步地去除多余的数据再进去分割存储(输出)。
IK分词器
IK分词器可以实现中英文单词的切分,支持ik_smart、ik_maxword等模式,可以自定义词库和支持热更新分词词典。其插件下载地址为: https://github.com/medcl/elasticsearch-analysis-ik
IK分词器的分词算法
ik_max_word:这种模式会进行最细粒度的分词,例如它会将“中华人民共和国国歌”分词为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,详尽地生成各种可能的组合,适合用于Term Query(术语查询)。
ik_smart:这种模式会进行最粗粒度的分词,例如它会将“中华人民共和国国歌”分词为“中华人民共和国,国歌”,适合用于Phrase queries(短语查询)。