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 配置, 下面是配置例子 ``` index : analysis : analyzer : standard : type : standard stopwords : [stop1, stop2] myAnalyzer1 : type : standard stopwords : [stop1, stop2, stop3] max_token_length : 500 # configure a custom analyzer which is # exactly like the default standard analyzer myAnalyzer2 : tokenizer : standard filter : [standard, lowercase, stop] tokenizer : myTokenizer1 : type : standard max_token_length : 900 myTokenizer2 : type : keyword buffer_size : 512 filter : myTokenFilter1 : type : stop stopwords : [stop1, stop2, stop3, stop4] myTokenFilter2 : type : length min : 0 max : 2000 ``` analyzer === ES內置若干analyzer, 另外還可以用內置的character filter, tokenizer, token filter組裝一個analyzer(custom analyzer), 比如 ``` index : analysis : analyzer : myAnalyzer : tokenizer : standard filter : [standard, lowercase, stop] ``` 如果你要使用第三方的analyzer插件,需要先在配置文件elasticsearch.yml中注冊, 下面是配置IkAnalyzer的例子 ``` index: analysis: analyzer: ik: alias: [ik_analyzer] type: org.elasticsearch.index.analysis.IkAnalyzerProvider ``` 當一個analyzer在配置文件中被注冊到一個名字(logical name)下后,在mapping定義或者一些API里就可以用這個名字來引用該analyzer了,比如 ``` "message": { "type": "string", "indexAnalyzer": "ik", "searchAnalyzer": "ik" } ``` 如果沒有指定索引和搜索用的analyzer,ES會用默認的analyzer來處理,也就是名字(logical name)為`default`, `default_index`, `default_search`的analyzer。 從名字可以看出來,`default`是索引和搜索時用的默認的analyzer,`default_index`是索引時用的默認的analyzer, `default_search`是查詢時用的默認analyzer。 下面是在elasticsearch.yml中配置默認analyzer的例子 ``` index: analysis: analyzer: default_index: tokenizer: standard filter: [standard, lowercase, my_synonym, my_snow] default_search: tokenizer: standard filter: [standard, lowercase, stop] ``` 或者用這種格式 ``` index.analysis.analyzer.default.type : "mmseg" ``` 一個analyzer可以起若干別名,比如在下面的例子中,standard analyzer可以用alias1或者alias2來引用 ``` index : analysis : analyzer。 : standard : alias: [alias1, alias2] type : standard stopwords : [test1, test2, test3] ``` 下面是內置的一些analyzer。 | 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](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html) | 各種語言 | | 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列表。 | 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`樣式的字符串| token filter === 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 | [插件](https://github.com/elasticsearch/elasticsearch-analysis-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 filter | logical name | description | | --------------------------|:-------------:| :-------------------------| | mapping char filter | mapping | 根據配置的映射關系替換字符 | | html strip char filter | html_strip | 去掉HTML元素 | | pattern replace char filter| pattern_replace| 用正則表達式處理字符串 | icu plugin === [icu analysis 插件](https://github.com/elasticsearch/elasticsearch-analysis-icu)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM