Elasticsearch 中文本分析Analysis是把全文本轉換成壹系列的單詞(term/token)的過程,也叫分詞。文本分析是使用分析器 Analyzer 來實現的,Elasticsearch內置了分析器,用戶也可以按照自己的需求自定義分析器。
為了提高搜索準確性,除了在數據寫入時轉換詞條,匹配 Query 語句時候也需要用相同的分析器對查詢語句進行分析。
Analyzer 的組成
Analyzer 由三部分組成:Character Filters、Tokenizer、Token Filters
Character Filters
Character Filters字符過濾器接收原始文本text的字符流,可以對原始文本增加、刪除字段或者對字符做轉換。 壹個Analyzer 分析器可以有 0-n 個按順序執行的字符過濾器。
Tokenizer
Tokenizer 分詞器接收Character Filters輸出的字符流,將字符流分解成的那個的單詞,並且輸出單詞流。例如空格分詞器會將文本按照空格分解,將 "Quick brown fox!" 轉換成 [Quick, brown, fox!]。分詞器也負責記錄每個單詞的順序和該單詞在原始文本中的起始和結束偏移 offsets 。
壹個Analyzer 分析器有且只有 1個分詞器。
Token Filters
Token Filter單詞過濾器接收分詞器 Tokenizer 輸出的單詞流,可以對單詞流中的單詞做添加、移除或者轉換操作,例如 lowercase token filter會將單詞全部轉換成小寫,stop token filter會移除 the、and 這種通用單詞,synonym token filter會往單詞流中添加單詞的同義詞。
Token filters不允許改變單詞在原文檔的位置以及起始、結束偏移量。
壹個Analyzer 分析器可以有 0-n 個按順序執行的單詞過濾器。
Elasticsearch內置的分詞器
Standard Analyzer - 默認分詞器,按詞切分,小寫處理
Simple Analyzer - 按照非字母切分(符號被過濾),小寫處理
Stop Analyzer - 小寫處理,停用詞過濾(the ,a,is)
Whitespace Analyzer - 按照空格切分,不轉小寫
Keyword Analyzer - 不分詞,直接將輸入當做輸出
Patter Analyzer - 正則表達式,默認 \W+
Language - 提供了 30 多種常見語言的分詞器
常用的插件分詞器
IK Analyzer - 對中文分詞友好,支持遠程詞典熱更新,有ik_smart 、ik_max_word 兩種分析器
pinyin Analyzer - 可以對中文進行拼音分析,搜索時使用拼音即可搜索出來對應中文
ICU Analyzer - 提供了 Unicode 的支持,更好的支持亞洲語言
hanLP Analyzer - 基於NLP的中文分析器