http://xguox.me/elasticsearch-custom-analyzer.html
http://www.rendoumi.com/elasticsearchzhong-de/
http://www.voidcn.com/blog/i6448038/article/p-5994876.html
http://blog.csdn.net/dm_vincent/article/details/41773959
elasticsearch分词涉及的概念
analysis:将文档转换成倒排索引的过程称为analysis(文本分析)
Tokenizer:根据某种算法从文档中提取出若干Token(词元),这个算法称为tokenizer(分词器)
Filter:分词后Token(词元)会被进一步处理,如转成小写,这些进一步的处理算法称为Filter(过滤器)
Analyzer:一个Tokenizer + N个 TokenFilter 构成,N>=0。Tokenizer之前还可以配置N个 CharFilter
Frequency:被处理后的结果被称为Term(词),文档中包含了几个这样的Term被称为Frequency(词频)
文本分析(analysis)工作由analyzer(分析器)组件负责。
analyzer由一个分词器(tokenizer)和0个或者多个过滤器(filter)组成,也可能会有0个或者多个字符映射器(character mappers)组成
tokenizer用来把文本拆分成一个个的Token。Token包含了比较多的信息,
比如Term在文本的中的位置及Term原始文本,以及Term的长度。
文本经过tokenizer处理后的结果称为token stream。
token stream其实就是一个个Token的顺序排列。token stream将等待着filter来处理。
filter链将用来处理Token Stream中的每一个token。
这些处理方式包括删除Token,改变Token,甚至添加新的Token。比如变小写,去掉里面的HTML标记,这些处理的算法被称为Character Filter(字符过滤器)
Elasticsearch(2.3) 默认给了我们八种 Analyzers(standard, simple, whitespace, stop, keyword, pattern, language, snowball) 开箱即用.
此外, 还提供给了我们 3 种 CharFilters, 12 种 Tokenizer, 以及一大堆 TokenFilters 用于自定义 Analyzers
Analyzer包含两个核心组件,Tokenizer以及TokenFilter。
两者的区别在于,前者在字符级别处理流,而后者则在词语级别处理流。
Tokenizer是Analyzer的第一步,其构造函数接收一个Reader作为参数,
而TokenFilter则是一个类似的拦截器,其参数可以是TokenStream、Tokenizer
内置分词器(analyzer)
Standard Analyzer standard StandardTokenizer,StandardFilter LowerCaseFilter StopFilter
Simple Analyzer simple LowerCaseTokenizer
Whitespace Analyzer whitespace WhitespaceTokenizer
Stop Analyzer stop LowerCaseTokenizer,StopFilter
Keyword Analyzer keyword KeywordTokenizer
Pattern Analyzer pattern
Language Analyzers lang
Snowball Analyzer snowball StandardTokenizer
Custom Analyzer custom 一个Tokenizer, 零个或多个Token Filter, 零个或多个Char Filter
内置character filters
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-charfilters.html
mapping char filter:mapping
html strip char filter:html_strip
pattern replace char filter:pattern_replace
内置tokenizers
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html
Standard Tokenizer
Edge NGram Tokenizer
Keyword Tokenizer 不分词
Letter Tokenizer 按单词分
Lowercase Tokenizer letter tokenizer, lower case filter
NGram Tokenizer
Whitespace Tokenizer 以空格为分隔符拆分
Pattern Tokenizer 定义分隔符的正则表达式
UAX Email URL Tokenizer 不拆分url和email
Path Hierarchy Tokenizer处理类似/path/to/somthing样式的字符串
Classic Tokenizer
Thai Tokenizer
内置token filters
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenfilters.html
Elasticsearch中内置了许多filter,读者也可以轻松地自己实现一个filter。
由一个 Tokenizer + N个 TokenFilter 构成,N>=0。Tokenizer之前还可以配置N个 CharFilter
{
"settings": {
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
}
}
首先是定义analysis(文本分析),其中我们先定义了一个文本处理的filter–>autocompletefilter,
然后定义analyzer(分析器),分析器由tokenizer(分词器)和两个过滤器组成,
tokenizer用标准的(standard),filter中一个是内置的lowercase,一个是我们上面定义的autocompletefilter