分词器 使用层面 主要用途 特点
ik_smart Elasticsearch 查询 商品搜索、查询匹配 粗粒度,搜索召回
ik_max_word Elasticsearch 索引 文本字段索引 细粒度,全面覆盖
Jieba Java 应用层 关键词提取、分词服务 支持自定义词典
HanLP Java 应用层 词性标注 语义分析

概述

分词器的主要作用是将用户输入的一段文本,按照一定逻辑,分析成多个词语的一种工具。

什么是分词器

顾名思义,文本分析就是把全文本转换成一系列单词(term/token)的过程,也叫分词。在 ES 中,Analysis 是通过分词器(Analyzer)来实现的,可使用 ES 内置的分析器或者按需定制化分析器。

举一个分词简单的例子:比如你输入 Mastering Elasticsearch,会自动帮你分成两个单词,一个是 mastering,另一个是 elasticsearch,可以看出单词也被转化成了小写的。

分词器的构成

分词器是专门处理分词的组件,由以下三部分组成:

组成部分 描述
character filter 接收原字符流,通过添加、删除或者替换操作改变原字符流。例如:去除文本中的html标签,或者将罗马数字转换成阿拉伯数字等。一个字符过滤器可以有零个或者多个
tokenizer 简单的说就是将一整段文本拆分成一个个的词。例如拆分英文,通过空格能将句子拆分成一个个的词,但是对于中文来说,无法使用这种方式来实现。在一个分词器中,有且只有一个 tokenizeer
token filters 将切分的单词添加、删除或者改变。例如将所有英文单词小写,或者将英文中的停词a删除等,在token filters中,不允许将token(分出的词)position或者offset改变。同时,在一个分词器中,可以有零个或者多个token filters

分词顺序

Analyzer 三个部分的执行顺序依次为:Character FiltersTokenizerToken Filters

这个顺序比较好理解:一个文本进来先对文本数据进行处理,再进行分词,最后对分词结果进行过滤。

索引和搜索分词

文本分词会发生在两个地方:

配置分词器