一、概念介绍

    全文搜索引擎会用某种算法对要建索引的文档进行分析, 从文档中提取出若干Token(词元), 这些算法称为Tokenizer(分词器), 这些Token会被进一步处理, 比如转成小写等, 这些处理算法被称为Token Filter(词元处理器), 被处理后的结果被称为Term(词), 文档中包含了几个这样的Term被称为Frequency(词频)。 引擎会建立Term和原文档的Inverted Index(倒排索引), 这样就能根据Term很快到找到源文档了。 文本被Tokenizer处理前可能要做一些预处理, 比如去掉里面的HTML标记, 这些处理的算法被称为Character Filter(字符过滤器), 这整个的分析算法被称为Analyzer(分析器)

整个分析过程,如下图所示:

二、ES中的分词器

       从第一部分内容可以看出:Analyzer(分析器)由Tokenizer(分词器)和Filter(过滤器)组成。

       1、ES内置分析器              

analyzer logical name description

standard analyzer

standard

standard tokenizer, standard filter, lower case filter, stop filter

simple analyzer

simple

lower case tokenizer

stop analyzer

stop

lower case tokenizer, stop filter

keyword analyzer

keyword

不分词,内容整体作为一个token(not_analyzed)

pattern analyzer

whitespace

正则表达式分词,默认匹配\W+

language analyzers

lang

各种语言

snowball analyzer

snowball

standard tokenizer, standard filter, lower case filter, stop filter, snowball filter

custom analyzer

custom

一个Tokenizer, 零个或多个Token Filter, 零个或多个Char Filter

 

       2、ES内置分词器

tokenizer logical name description

standard tokenizer

standard

 

edge ngram tokenizer

edgeNGram

 

keyword tokenizer

keyword

不分词

letter analyzer

letter

按单词分

lowercase analyzer

lowercase

letter tokenizer, lower case filter

ngram analyzers

nGram

 

whitespace analyzer

whitespace

以空格为分隔符拆分

pattern analyzer

pattern

定义分隔符的正则表达式

uax email url analyzer

uax_url_email

不拆分url和email

path hierarchy analyzer

path_hierarchy

处理类似/path/to/somthing样式的字符串

 

       3、ES内置过滤器

        (1)ES内置的token filter

token filter logical name description

standard filter

standard

 

ascii folding filter

asciifolding

 

length filter

length

去掉太长或者太短的

lowercase filter

lowercase

转成小写

ngram filter

nGram

 

edge ngram filter

edgeNGram

 

porter stem filter

porterStem

波特词干算法

shingle filter

shingle

定义分隔符的正则表达式

stop filter

stop

移除 stop words

word delimiter filter

word_delimiter

将一个单词再拆成子分词

stemmer token filter

stemmer

 

stemmer override filter

stemmer_override

 

keyword marker filter

keyword_marker

 

keyword repeat filter

keyword_repeat

 

kstem filter

kstem

 

snowball filter

snowball

 

phonetic filter

phonetic

插件

synonym filter

synonyms

处理同义词

compound word filter

dictionary_decompounder, hyphenation_decompounder

分解复合词

reverse filter

reverse

反转字符串

elision filter

elision

去掉缩略语

truncate filter

truncate

截断字符串

unique filter

unique

 

pattern capture filter

pattern_capture

 

pattern replace filte

pattern_replace

用正则表达式替换

trim filter

trim

去掉空格

limit token count filter

limit

限制token数量

hunspell filter

hunspell

拼写检查

common grams filter

common_grams

 

normalization filter

arabic_normalization, persian_normalization

 

         (2)ES内置的character filter   

character filter logical name description

mapping char filter

mapping

根据配置的映射关系替换字符

html strip char filter

html_strip

去掉HTML元素

pattern replace char filter

pattern_replace

用正则表达式处理字符串

 

        4、自定义分析器

       ES允许用户通过配置文件elasticsearch.yml自定义分析器Analyzer,如下:

       index:

              analysis:

                     analyzer:

                            myAnalyzer:

                                   tokenizer: standard

standard, lowercase, stop]

standard, lowercase, stop],使用了标准过滤器、转小写过滤器和停用词过滤器。

 

       也可以使用第三方分析器,比如IKAnalyzer,详情请参考ElasticSearch安装ik分词插件