Elasticsearch 系统默认分词器
介绍:ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Elasticsearch中,内置了很多分词器(analyzers)。下面来进行比较下系统默认分词器和常用的中文分词器之间的区别。
系统默认分词器:
1、standard 分词器
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html
如何使用:http://www.yiibai.com/lucene/lucene_standardanalyzer.html
英文的处理能力同于StopAnalyzer.支持中文采用的方法为单字切分。他会将词汇单元转换成小写形式,并去除停用词和标点符号。
1/**StandardAnalyzer分析器*/
2public void standardAnalyzer(String msg){
3 StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
4 this.getTokens(analyzer, msg);
5}
2、simple 分词器
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-simple-analyzer.html
如何使用: http://www.yiibai.com/lucene/lucene_simpleanalyzer.html
功能强于WhitespaceAnalyzer, 首先会通过非字母字符来分割文本信息,然后将词汇单元统一为小写形式。该分析器会去掉数字类型的字符。
1/**SimpleAnalyzer分析器*/
2 public void simpleAnalyzer(String msg){
3 SimpleAnalyzer analyzer = new SimpleAnalyzer(Version.LUCENE_36);
4 this.getTokens(analyzer, msg);
5 }
3、Whitespace 分词器
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-whitespace-analyzer.html
如何使用:http://www.yiibai.com/lucene/lucene_whitespaceanalyzer.html
仅仅是去除空格,对字符没有lowcase化,不支持中文;
并且不对生成的词汇单元进行其他的规范化处理。
1/**WhitespaceAnalyzer分析器*/
2 public void whitespaceAnalyzer(String msg){
3 WhitespaceAnalyzer analyzer = new WhitespaceAnalyzer(Version.LUCENE_36);
4 this.getTokens(analyzer, msg);
5 }
4、Stop 分词器
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-stop-analyzer.html
如何使用:http://www.yiibai.com/lucene/lucene_stopanalyzer.html
StopAnalyzer的功能超越了SimpleAnalyzer,在SimpleAnalyzer的基础上增加了去除英文中的常用单词(如the,a等),也可以更加自己的需要设置常用单词;不支持中文
1//StopAnalyzer分析器
2public void stopAnalyzer(String msg){
3 StopAnalyzer analyzer = new StopAnalyzer(Version.LUCENE_36);
4 this.getTokens(analyzer, msg);
5}
5、keyword 分词器
KeywordAnalyzer把整个输入作为一个单独词汇单元,方便特殊类型的文本进行索引和检索。针对邮政编码,地址等文本信息使用关键词分词器进行索引项建立非常方便。
6、pattern 分词器
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pattern-analyzer.html
一个pattern类型的analyzer可以通过正则表达式将文本分成"terms"(经过token Filter 后得到的东西 )。接受如下设置:
一个 pattern analyzer 可以做如下的属性设置:
lowercase | terms是否是小写. 默认为 true 小写. |
---|---|
pattern | 正则表达式的pattern, 默认是 \W+. |
flags | 正则表达式的flags |
stopwords | 一个用于初始化stop filter的需要stop 单词的列表.默认单词是空的列表 |
7、language 分词器
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html
一个用于解析特殊语言文本的analyzer集合。( arabic,armenian, basque, brazilian, bulgarian, catalan, cjk, czech, danish, dutch, english, finnish, french,galician, german, greek, hindi, hungarian, indonesian, irish, italian, latvian, lithuanian, norwegian,persian, portuguese, romanian, russian, sorani, spanish, swedish, turkish, thai.)可惜没有中文。不予考虑
8、snowball 分词器
一个snowball类型的analyzer是由standard tokenizer和standard filter、lowercase filter、stop filter、snowball filter这四个filter构成的。
snowball analyzer 在Lucene中通常是不推荐使用的。
9、Custom 分词器
是自定义的analyzer。允许多个零到多个tokenizer,零到多个 Char Filters. custom analyzer 的名字不能以 "_"开头.
The following are settings that can be set for a custom analyzer type:
Setting | Description |
---|---|
tokenizer | 通用的或者注册的tokenizer. |
filter | 通用的或者注册的token filters |
char_filter | 通用的或者注册的 character filters |
position_increment_gap | 距离查询时,最大允许查询的距离,默认是100 |
自定义的模板:
1index :
2 analysis :
3 analyzer :
4 myAnalyzer2 :
5 type : custom
6 tokenizer : myTokenizer1
7 filter : [myTokenFilter1, myTokenFilter2]
8 char_filter : [my_html]
9 position_increment_gap: 256
10 tokenizer :
11 myTokenizer1 :
12 type : standard
13 max_token_length : 900
14 filter :
15 myTokenFilter1 :
16 type : stop
17 stopwords : [stop1, stop2, stop3, stop4]
18 myTokenFilter2 :
19 type : length
20 min : 0
21 max : 2000
22 char_filter :
23 my_html :
24 type : html_strip
25 escaped_tags : [xxx, yyy]
26 read_ahead : 1024
10、fingerprint 分词器
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-fingerprint-analyzer.html