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

原文发布于微信公众号 - zhisheng(zhisheng_blog)

原文发表时间:2018-08-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Danny的专栏

【SSH快速进阶】——Hibernate继承映射:每个具体类映射一张表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1054
来自专栏鸿的学习笔记

records包源码解析

核心类有三个 Record, RecordCollection, Database。在做源码分析时,先从入口类Database开始:

712
来自专栏JackieZheng

Nutch源码阅读进程2---Generate

继之前仓促走完nutch的第一个流程Inject后,再次起航,Debug模式走起,进入第二个预热阶段Generate~~~ 上期回顾:Inject主要是将爬取列...

1957
来自专栏佳爷的后花媛

php统计查询,实时更新

在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩,用户的银行卡张数等等,ThinkPHP为这些统...

3573
来自专栏游戏杂谈

Unity Inspector面板常用的属性

其它还有诸如 HelpURL 等,详情可参考 官方帮忙文档 https://docs.unity3d.com/ScriptReference/HeaderAtt...

1963
来自专栏java一日一条

简单理解倒排索引

倒排索引从逻辑结构和基本思路上来讲非常简单。下面我们通过具体实例来进行说明,使得读者能够对倒排索引有一个宏观而直接的感受。假设文档集合包含五个文档,每个文档内容...

1052
来自专栏YG小书屋

ES 查询优化(二)

1.1K3
来自专栏FreeBuf

SQL注入之骚姿势小记

写在前面 小记一下CTF那些日子和DROPS队友学到的SQL注入的骚姿势。 By 010 1、IN之骚 这个我也偶然发现的,也不知前辈们有没有早已总结好的套路了...

3466
来自专栏乐沙弥的世界

MySQL auto_increment_increment,auto_increment_offset 用法

    MySQL中对于表上ID自增列可以在创建表的时候来指定列上的auto_increment属性;等同于SQL server中的identity属性;Ora...

903
来自专栏技术沉淀

命令行工具:awk文本处理

1673

扫码关注云+社区