Analysis 和Analyzer
analysis:
1,对文本分词,分成适合做倒排索引的词语。
2,对词语做标准化(normalizing),比如统一大小写、缩写转换等。这样做的目的是为了提升可搜索的能力。
Analyzer:
Analyzer对document做分析(analysis)。一个Analyzer包含三部分:
- character filter:过滤器。它的作用是在分词之前整理文本,比如去掉html标签、转换&为and等。
- tokenizer:分词器。把文本分成可以组织倒排索引的词组。
- token filter:分词过滤。它的作用包括:转换大小写、删除停词、增加对应的同义词。
Build-in Analyzer:
Standard Analyzer:
标准分词,它根据字(word)边界分词,并且会滤除大部分标点符号。最后它会把分好的词转成小写。
Simple Analyzer:
只要遇到不是字母的字符时就分词,并且把词语小写化。
Whitespace Analyzer:
根据空白来分词,它不会小写化词语。
n-gram Analyzer:
n-gram分词可以用于前后模糊的查询方式,既可以用于查找也可以用于实现搜索引擎的自动补全功能。这是因为n-gram会把类似“ABCD”的词分成:AB、ABC、ABCD、BC、BCD、CD。
如果采用n-gram分词来建立倒排索引会很大程度上碰着索引大小,如果只是用在前缀补全上可以选择edge n-gram。
ES内置了n-gram的tokenizer,可以如下配置实现n-gram Analyzer:
"settings" : {
"analysis" : {
"analyzer" : {
"ngram_2_10" : {
"tokenizer" : "ngram_2_10_tokenizer"
}
},
"tokenizer" : {
"ngram_2_10_tokenizer" : {
"type" : "nGram",
"min_gram" : "2",
"max_gram" : "10",
"token_chars": [ "letter", "digit" ]
}
}
}
}