elasticsearch文档-analysis

来源:互联网 发布:辐射4射击手感优化 编辑:程序博客网 时间:2024/05/16 11:06

原文地址



analysis

基本概念

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

ES内置了很多Analyzer, 还有很多第三方的Analyzer插件, 比如一些处理中文的Analyzer(中文分词)。

analyzer、 tokenizer、 filter可以在elasticsearch.yml 配置, 下面是配置例子

  1. index :
  2. analysis :
  3. analyzer :
  4. standard :
  5. type : standard
  6. stopwords : [stop1, stop2]
  7. myAnalyzer1 :
  8. type : standard
  9. stopwords : [stop1, stop2, stop3]
  10. max_token_length : 500
  11. # configure a custom analyzer which is
  12. # exactly like the default standard analyzer
  13. myAnalyzer2 :
  14. tokenizer : standard
  15. filter : [standard, lowercase, stop]
  16. tokenizer :
  17. myTokenizer1 :
  18. type : standard
  19. max_token_length : 900
  20. myTokenizer2 :
  21. type : keyword
  22. buffer_size : 512
  23. filter :
  24. myTokenFilter1 :
  25. type : stop
  26. stopwords : [stop1, stop2, stop3, stop4]
  27. myTokenFilter2 :
  28. type : length
  29. min : 0
  30. max : 2000

analyzer

ES内置若干analyzer, 另外还可以用内置的character filter, tokenizer, token filter组装一个analyzer(custom analyzer), 比如

  1. index :
  2. analysis :
  3. analyzer :
  4. myAnalyzer :
  5. tokenizer : standard
  6. filter : [standard, lowercase, stop]

如果你要使用第三方的analyzer插件,需要先在配置文件elasticsearch.yml中注册, 下面是配置IkAnalyzer的例子

  1. index:
  2. analysis:
  3. analyzer:
  4. ik:
  5. alias: [ik_analyzer]
  6. type: org.elasticsearch.index.analysis.IkAnalyzerProvider

当一个analyzer在配置文件中被注册到一个名字(logical name)下后,在mapping定义或者一些API里就可以用这个名字来引用该analyzer了,比如

  1. "message": {
  2. "type": "string",
  3. "indexAnalyzer": "ik",
  4. "searchAnalyzer": "ik"
  5. }

如果没有指定索引和搜索用的analyzer,ES会用默认的analyzer来处理,也就是名字(logical name)为default,default_index, default_search的analyzer。 从名字可以看出来,default是索引和搜索时用的默认的analyzer,default_index是索引时用的默认的analyzer,default_search是查询时用的默认analyzer。

下面是在elasticsearch.yml中配置默认analyzer的例子

  1. index:
  2. analysis:
  3. analyzer:
  4. default_index:
  5. tokenizer: standard
  6. filter: [standard, lowercase, my_synonym, my_snow]
  7. default_search:
  8. tokenizer: standard
  9. filter: [standard, lowercase, stop]

或者用这种格式

  1. index.analysis.analyzer.default.type : "mmseg"

一个analyzer可以起若干别名,比如在下面的例子中,standard analyzer可以用alias1或者alias2来引用

  1. index :
  2. analysis :
  3. analyzer :
  4. standard :
  5. alias: [alias1, alias2]
  6. type : standard
  7. stopwords : [test1, test2, test3]

下面是内置的一些analyzer。

analyzerlogical namedescriptionstandard analyzerstandardstandard tokenizer, standard filter, lower case filter, stop filtersimple analyzersimplelower case tokenizerstop analyzerstoplower case tokenizer, stop filterkeyword analyzerkeyword不分词,内容整体作为一个token(not_analyzed)pattern analyzerwhitespace正则表达式分词,默认匹配\W+language analyzerslang各种语言snowball analyzersnowballstandard tokenizer, standard filter, lower case filter, stop filter, snowball filtercustom analyzercustom一个Tokenizer, 零个或多个Token Filter, 零个或多个Char Filter

tokenizer

ES内置的tokenizer列表。

tokenizerlogical namedescriptionstandard tokenizerstandard edge ngram tokenizeredgeNGram keyword tokenizerkeyword不分词letter analyzerletter按单词分lowercase analyzerlowercaseletter tokenizer, lower case filterngram analyzersnGram whitespace analyzerwhitespace以空格为分隔符拆分pattern analyzerpattern定义分隔符的正则表达式uax email url analyzeruax_url_email不拆分url和emailpath hierarchy analyzerpath_hierarchy处理类似/path/to/somthing样式的字符串

token filter

ES内置的token filter列表。

token filterlogical namedescriptionstandard filterstandard ascii folding filterasciifolding length filterlength去掉太长或者太短的lowercase filterlowercase转成小写ngram filternGram edge ngram filteredgeNGram porter stem filterporterStem波特词干算法shingle filtershingle定义分隔符的正则表达式stop filterstop移除 stop wordsword delimiter filterword_delimiter将一个单词再拆成子分词stemmer token filterstemmer stemmer override filterstemmer_override keyword marker filterkeyword_marker keyword repeat filterkeyword_repeat kstem filterkstem snowball filtersnowball phonetic filterphonetic插件synonym filtersynonyms处理同义词compound word filterdictionary_decompounder, hyphenation_decompounder分解复合词reverse filterreverse反转字符串elision filterelision去掉缩略语truncate filtertruncate截断字符串unique filterunique pattern capture filterpattern_capture pattern replace filtepattern_replace用正则表达式替换trim filtertrim去掉空格limit token count filterlimit限制token数量hunspell filterhunspell拼写检查common grams filtercommon_grams normalization filterarabic_normalization, persian_normalization 

character filter

ES内置的character filter列表

character filterlogical namedescriptionmapping char filtermapping根据配置的映射关系替换字符html strip char filterhtml_strip去掉HTML元素pattern replace char filterpattern_replace用正则表达式处理字符串

icu plugin

icu analysis 插件


0 0
原创粉丝点击