zoukankan      html  css  js  c++  java
  • elasticsearch文档-analysis

    elasticsearch文档-analysis

     

    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)为defaultdefault_indexdefault_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 namedescription
    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

    tokenizer

    ES内置的tokenizer列表。

    tokenizerlogical namedescription
    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样式的字符串

    token filter

    ES内置的token filter列表。

    token filterlogical namedescription
    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  

    character filter

    ES内置的character filter列表

    character filterlogical namedescription
    mapping char filter mapping 根据配置的映射关系替换字符
    html strip char filter html_strip 去掉HTML元素
    pattern replace char filter pattern_replace 用正则表达式处理字符串

    icu plugin

    icu analysis 插件

     
     
     
    标签: elasticsearch
  • 相关阅读:
    thinkphp自动映射分析
    thinkphp自动创建数据对象分析
    html模板输头部出现"&#65279"
    register_shutdown_function 函数详解
    mcrypt加密以及解密过程
    SVN不能解锁,报错:没有匹配的可用锁令牌的解决方法
    微信公众平台JSSDK开发
    PHP的UTF-8中文转拼音处理类
    PHP中文转拼音函数
    php生成mysql数据字典
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3398304.html
Copyright © 2011-2022 走看看