分析过程
当数据被发送到elasticsearch后并加入倒排序索引之前,elasticsearch会对文档进行处理:
- 字符过滤:使用字符过滤器转变字符。
- 文本切分为分词:将文本(档)分为单个或多个分词。
- 分词过滤:使用分词过滤器转变每个分词。
- 分词索引:最终将分词存储在Lucene倒排索引中。
整体流程:
目的是达到人性化的分词
内置字符过滤器
HTML字符过滤器、映射字符过滤器、模式替换过滤器
HTML字符过滤器
POST _analyze { "tokenizer": "keyword", "char_filter": [ "html_strip" ], "text": "<p>I'm so <b>happy</b>!</p>" }
结果
{ "tokens" : [ { "token" : """ I'm so happy! """, "start_offset" : 0, "end_offset" : 32, "type" : "word", "position" : 0 } ] }
自定义HTML过滤器
PUT my_index { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "keyword", "char_filter": ["my_char_filter"] } }, "char_filter": { "my_char_filter": { "type": "html_strip", "escaped_tags": ["b"] } } } } }
映射字符过滤
PUT my_index { "settings": { "analysis": { "analyzer": { "my_analyzer":{ "tokenizer":"keyword", "char_filter":["my_char_filter"] } }, "char_filter":{ "my_char_filter":{ "type":"mapping", "mappings":["苍井空 => 666","武藤兰 => 888"] } } } } } GET my_index/_analyze { "analyzer": "my_analyzer", "text":"苍井空热爱武藤兰,可惜苍井空后来结婚了" }
结果
1 { 2 "tokens" : [ 3 { 4 "token" : "666热爱888,可惜666后来结婚了", 5 "start_offset" : 0, 6 "end_offset" : 19, 7 "type" : "word", 8 "position" : 0 9 } 10 ] 11 }