Elasticsearch analysis总结
Analysis
Analysis是es中来对文本作处理的过程, 简单地说就是把句子分成一个个token, 具体由analyzer来执行这一过程.
Index time analysis
为了能高效地检索数据, ES会在数据存储前预先对文本做分词, 对每个token建立一个倒排索引.
对应的analyzer是 Index time analyzer
Search time analysis
查询ES中匹配关键字的文档时, 也要对搜索的关键字做处理, 将其转化成更小的单元token.
对应的analyzer是 Search time analyzer
Analyzer
analyzer由以下三部分组成
- Tokenizer 对文本作分词, 将句子切分成更小的单元token
- Character Filter 分词前对文本作预处理, 可以用来过滤掉无效字符等等
- Token Filter 分词完成后, 对切分好的token做进一步的处理
一个analyzer有且只能有一个tokenizer, 可以有多个CharFilter和TokenFilter
文本处理的顺序
先由Character Filter对文本做预处理, 然后把结果传给Tokenizer分词, 最后Token Filter对token做进一步的处理
analyzer的优先级
Index time analyzer
- 优先使用 field 中定义的analyzer
- 其次使用 index 中定义的名为 default 的analyzer
- 最后使用全局默认的 standard analyazer
Search time analyzer
- 优先使用query中定义的analyzer
- field 中定义的search_analyzer
- field 定义的analyzer
- index 中定义的 default_search analyzer
- index 中定义的 default analyzer
- standard analyzer
Tokenizer
将一段文字切分成许多token并输出
同时还做了以下几件事情
- 记录切分出来的token的位置或者顺序 (用于短语和临近搜索)
- 记录每个token的起始和终止位置 (用于对匹配的文字做高亮)
- 记录每个token的类型, 比如 <ALPHANUM>, <HANGUL>, <NUM>, 不区分的话返回<word>
Character Filter
对文本做预处理, 可以增加, 删除, 替换文本中的字符
Token Filter
对分词的结果做进一步处理, 包括修改token(更改大小写), 删除token(去掉停止词), 添加token(添加同义词)
Comments