ElasticSearch分词器比较及使用方法

ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

Elasticsearch中,内置了很多分词器(analyzers)。下面来进行比较下系统默认分词器和常用的中文分词器之间的区别。

系统默认分词器:

1、standard 分词器

英文的处理能力同于StopAnalyzer.支持中文采用的方法为单字切分。他会将词汇单元转换成小写形式,并去除停用词和标点符号。

如何使用:http://www.yiibai.com/lucene/lucene_standardanalyzer.html

StandardAnalyzer分析器例子:

public void standardAnalyzer(String msg){

     StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);

      this.getTokens(analyzer, msg);

}

2、simple 分词器

功能强于WhitespaceAnalyzer, 首先会通过非字母字符来分割文本信息,然后将词汇单元统一为小写形式。该分析器会去掉数字类型的字符。

如何使用: http://www.yiibai.com/lucene/lucene_simpleanalyzer.html

SimpleAnalyzer分析器例子

public void simpleAnalyzer(String msg){

    SimpleAnalyzer analyzer = new SimpleAnalyzer(Version.LUCENE_36);

    this.getTokens(analyzer, msg);

}

3、Whitespace 分词器

仅仅是去除空格,对字符没有lowcase化,不支持中文; 并且不对生成的词汇单元进行其他的规范化处理。

如何使用:http://www.yiibai.com/lucene/lucene_whitespaceanalyzer.html

WhitespaceAnalyzer分析器例子

public void whitespaceAnalyzer(String msg){

    WhitespaceAnalyzer analyzer = new WhitespaceAnalyzer(Version.LUCENE_36);

    this.getTokens(analyzer, msg);

}

4、Stop 分词器

StopAnalyzer的功能超越了SimpleAnalyzer,在SimpleAnalyzer的基础上增加了去除英文中的常用单词(如the,a等),也可以更加自己的需要设置常用单词;不支持中文

如何使用:http://www.yiibai.com/lucene/lucene_stopanalyzer.html

StopAnalyzer分析器例子

public void stopAnalyzer(String msg){

    StopAnalyzer analyzer = new StopAnalyzer(Version.LUCENE_36);

    this.getTokens(analyzer, msg);

}

5、keyword 分词器

KeywordAnalyzer把整个输入作为一个单独词汇单元,方便特殊类型的文本进行索引和检索。针对邮政编码,地址等文本信息使用关键词分词器进行索引项建立非常方便。

6、pattern 分词器

一个pattern类型的analyzer可以通过正则表达式将文本分成"terms"(经过token Filter 后得到的东西 )。接受如下设置:

一个 pattern analyzer 可以做如下的属性设置:

lowercaseterms是否是小写. 默认为 true 小写.pattern正则表达式的pattern, 默认是 W+.flags正则表达式的flagsstopwords一个用于初始化stop filter的需要stop 单词的列表.默认单词是空的列表

7、language 分词器

一个用于解析特殊语言文本的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 的名字不能以 "_"开头.

SettingDescriptiontokenizer通用的或者注册的tokenizer.filter通用的或者注册的token filterschar_filter通用的或者注册的 character filtersposition_increment_gap距离查询时,最大允许查询的距离,默认是100

自定义的模板:

index :

analysis :

analyzer :

myAnalyzer2 :

type : custom

tokenizer : myTokenizer1

filter : [myTokenFilter1, myTokenFilter2]

char_filter : [my_html]

position_increment_gap: 256

tokenizer :

myTokenizer1 :

type : standard

max_token_length : 900

filter :

myTokenFilter1 :

type : stop

stopwords : [stop1, stop2, stop3, stop4]

myTokenFilter2 :

type : length

min : 0

max : 2000

char_filter :

my_html :

type : html_strip

escaped_tags : [xxx, yyy]

read_ahead : 1024

中文分词器:

1、ik-analyzer

IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。

采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和最大词长两种切分模式;具有83万字/秒(1600KB/S)的高速处理能力。采用了多子处理器分析模式,支持:英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符。优化的词典存储,更小的内存占用。支持用户词典扩展定义。针对Lucene全文检索优化的查询分析器IKQueryParser(作者吐血推荐);引入简单搜索表达式,采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率。

Maven用法:

<dependency>

    <groupId>org.wltea.ik-analyzer</groupId>

    <artifactId&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值