ElasticSearch 解析机制常见用法库 之 analyzer常用用法

       写ElasticSearch的搜索Schema是一件让人头疼的事儿,看着满屏的“特殊字符”(例如:“keyword”、“nGram”等等)有种想吐的感觉:为何这么定义?定义了是什么意思?有什么效果?

       为此,我总结了一些用法,希望会有所帮助。

       首先,要知道一个单词或者短语,进入到ElasticSearch是如何被处理的:

       文字太过枯燥,我直接上从网上扒来的图:

       

          单词或文档先经过Character Filters;Character Filters的作用就是对文本进行一个预处理,例如把文本中所有“&”换成“and”,把“?”去掉等等操作。

          之后就进入了十分重要的tokenizers模块了,Tokenizers的作用是进行分词,例如,“tom is a good doctor .”。经过Character Filters去掉句号“.”(假设)后,分词器Tokenizers会将这个文本分出很多词来:“tom”、“is”、“a”、“good”、“doctor”。

          经过分词之后的集合,最后会进入Token Filter词单元模块进行处理,此模块的作用是对已经分词后的集合(tokens)单元再进行操作,例如把“tom”再次拆分成“t”、“o”、“m”等操作。最后得出来的结果集合,就是最终的集合。

          所以整个流程是:单词 ====》Character Filter 预处理 =====》tokenizer分词 ====》 token filter对分词进行再处理。

          到此为止,Analyzer是什么鬼?它干什么呢?

          Analyzer是由一个tokenizer、零到多个Token Filter、还有零到多个CharFilters构成的,也就是说一个Analyzer就是一个完整的解析模块。

          下面,着重介绍一下常用的Analyzer、Tokenizer、Token filter、Character Filter:


Standard Analyzer

一个“standard”标准类型的 analyzer 就是由 标准分词 “Standard Tokenizer”和标准分词过滤器“Standard Token Filter”、小写字母转换分词过滤“Lower case Token Filter”、还有“Stop Token Filter”过滤构成的

以下是一个standard类型

 
设置 说明
stopwords                 一个用于初始化stop filter的需要stop 单词的列表.默认为空 。

 max_token_length             最大的token集合,即经过tokenizer过后得到的结果集的最大值。如果token的长度超过了设置的长度,将会继续分,默认255


Stop Analyzer

一个stop类型的analyzer是由 Lower case Tokenizer 和 Stop Token Filter构成的。

以下是一个stop analyzer可以设置的属性:

设置 说明

stopwords

一个用于初始化stop filter的需要stop 单词的列表.默认单词是英语 

stopwords_path

一个有stopwords 配置文件的路径(一个和config文件相关的路径或者URL) 

用“stopwords: _none_ ”来定义一个空的stopword列表

Simple Analyzer

一个simple类型的analyzer是由lower case Tokenizer构成的,具体信息可以查看此Tokenzier

Whitespace Analyzer

一个whitespace类型的analyzer是由Whitespace Tokenizer构成,请具体查看Whitespace Tokenizer

Keyword Analyzer

一个keyword类型的analyzer,它的Tokenizer将整块的数据作为一个小Token(即经过Tokenizer过滤后的数据),这对于像“邮政编码”、“id”等数据非常有用。注意:当使用并定义这种analyzer的时候,单纯的将fieled 设置为“not_analyzed”可能会更有意义。

Pattern Analyzer

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

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

lowercase

terms是否是小写. 默认为 true 小写.

pattern

正则表达式的pattern, 默认是 \W+.

flags

正则表达式的flags.

stopwords

一个用于初始化stop filter的需要stop 单词的列表.默认单词是空的列表

Snowball Analyzer

一个snowball类型的analyzer是由standard tokenizer和standard filter、lowercase filter、stop filter、snowball filter这四个filter构成的。

snowball analyzer 在Lucene中通常是不推荐使用的。

Language Analyzers

一个用于解析特殊语言文本的analyzer集合。( arabic,armenianbasquebrazilianbulgariancatalancjkczechdanishdutchenglishfinnishfrench,galiciangermangreekhindihungarianindonesianirishitalianlatvianlithuaniannorwegian,persianportugueseromanianrussiansoranispanishswedishturkishthai.)可惜没有中文。不予考虑

Custom Analyzer

简而言之,是自定义的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

自定义的模板:

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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值