ElasticSearch 解析机制常见用法库 之 analyzer常用用法
2016-05-31 19:19
627 查看
写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类型
一个stop类型的analyzer是由 Lower case Tokenizer 和 Stop Token Filter构成的。
以下是一个stop analyzer可以设置的属性:
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 后得到的东西 )。接受如下设置:
一个
可以做如下的属性设置:
Snowball Analyzer
一个snowball类型的analyzer是由standard tokenizer和standard filter、lowercase filter、stop filter、snowball filter这四个filter构成的。
snowball analyzer 在Lucene中通常是不推荐使用的。
Language Analyzers
一个用于解析特殊语言文本的analyzer集合。(
Custom Analyzer
简而言之,是自定义的analyzer。允许多个零到多个tokenizer,零到多个
The following are settings that can be set for a
type:
自定义的模板:
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
为此,我总结了一些用法,希望会有所帮助。
首先,要知道一个单词或者短语,进入到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可以设置的属性:
设置 | 说明 |
---|---|
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 后得到的东西 )。接受如下设置:
一个
patternanalyzer
可以做如下的属性设置:
lowercase | terms是否是小写. 默认为 true 小写. |
pattern | 正则表达式的pattern, 默认是 \W+. |
flags | 正则表达式的flags. |
stopwords | 一个用于初始化stop filter的需要stop 单词的列表.默认单词是空的列表 |
一个snowball类型的analyzer是由standard tokenizer和standard filter、lowercase filter、stop filter、snowball filter这四个filter构成的。
snowball analyzer 在Lucene中通常是不推荐使用的。
Language Analyzers
一个用于解析特殊语言文本的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.)可惜没有中文。不予考虑
Custom Analyzer
简而言之,是自定义的analyzer。允许多个零到多个tokenizer,零到多个
Char Filters. custom analyzer 的名字不能以 "_"开头.
The following are settings that can be set for a
customanalyzer
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
相关文章推荐
- PAT 团体程序设计天梯赛-练习集 L2-001. 紧急救援 【dijkstra】
- 周记 2016.5.31
- caffe使用中的问题记录
- 简单vim配置
- zookeeper 与 kafka的协同工作
- 第12周 项目二
- 分享SysWOW64 文件夹
- 260. Single Number III
- Dubbo的helloworld maven版
- 微软研究院图像识别挑战赛 MSR Image Recognition Challenge (IRC)
- CUBE 和 ROLLUP 之间的具体区别
- c++中transform
- Android开发学习之路-提升用户体验小技巧
- Unix系统编程(2) - 文件系统
- 你有被stringstream坑过吗?
- 用java定义三维空间的点
- vim编辑器的使用
- 安卓bitmap图片保存到系统图库
- baby-step算法
- 我的助理辞职了!——看完后大家对这篇文章应该很有感触