Elasticsearch---Analyzer(分析器)
Elasticsearch—Analyzer(分析器)
文章目錄
- Elasticsearch---Analyzer(分析器)
- 什么是Analyzer
- 1 分析器的組成
- 1.1 normalization(標準定義器)
- 1.2 字符過濾器(character filter)
- 1.3 令牌過濾器(token filter)
- 1.4 分詞器(tokenizer):
- 2 常見分析器:
- 2.1 Standard Analyzer
- 2.2 Simple Analyzer
- 2.3 Stop Analyzer
- 2.4 Pattern Analyzer
- 2.5 Language Analyzers
- 2.6 Whitespace Analyzer
- 2.7 Keyword Analyzer
- 2.8 Fingerprint Analyzer
- 2.9自定義分析器:custom analyzer
- 2.10 中文分析器
- 2.10.1 IK Analyzer (使用頻率很高的,對搜索要求不高的建議選用)
- 安裝和部署
- IK文件描述
- ik提供的兩種analyzer:
- 熱更新
- 2.10.2 Smart Chinese Analysis
- 2.10.3 HanLP (推薦)
- 總結
什么是Analyzer
一個標準的分析器Analyzer由兩部分組成,一部分是分詞器,被稱為Tokenizer;另一部分是過濾器,被稱為TokenFilter。一個分析器Analyzer往往由一個分詞器和多個過濾器組成。這里所說的過濾器,和檢索時用的過濾器是完全不同的兩個概念,這里所講的過濾器是用于對用戶切分出來的詞進行一些處理,如去掉一些敏感詞、停用詞、大小寫轉換、單復數轉換等等。
1 分析器的組成
1.1 normalization(標準定義器)
文檔規范化,提高召回率,是配合分析器(analyzer)完成其功能的。
拼寫錯誤、形容詞、單復數、動詞、大小寫、分詞、稱謂等轉換成標準詞匯
1.2 字符過濾器(character filter)
分詞之前的預處理,過濾無用字符,將原始文本作為字符流接收,并可以通過添加、刪除或更改字符來轉換流。比如去除 html 標簽
- HTML Strip Character Filter: 剝離像<b>這樣的HTML元素,并解碼像&這樣的HTML實體。
- Mapping Character Filter:映射字符篩選器用指定的替換項替換任何出現的指定字符串。
- Pattern Replace Character Filter:用指定的替換替換匹配正則表達式的任何字符。
1.3 令牌過濾器(token filter)
停用詞、時態轉換、大小寫轉換、同義詞轉換、語氣詞處理等。
1.4 分詞器(tokenizer):
切詞,按照規則切分為單詞,比如按照空格切分
2 常見分析器:
2.1 Standard Analyzer
組成:Standard Tokenizer、Lower Case Token Filter和Stop Token Filter (默認禁用)
默認分析器,按照Unicode文本分割算法所定義的詞邊界將文本拆分成若干詞項。它刪除大多數標點符號,小寫項,并支持刪除停止詞。
提供基于語法的標記,適用于大部分語言,但是對中文支持的不理想,會逐字拆分,按詞切分。
2.2 Simple Analyzer
組成:只有分詞器Lowercase Tokenizer而無過濾器
當遇到非字母的字符時,簡單分析器將文本拆分成若干詞項。所有項都是小寫的。
2.3 Stop Analyzer
組成:Lowercase Tokenizer和Stop Token Filter
和Simple Analyzer相比多了基于所提供的停用詞(stop word)過濾數據的功能,停用詞指語氣助詞等修飾性詞語。
2.4 Pattern Analyzer
組成:Pattern Tokenizer、Lowercase Token Filter和Stop Token Filter(默認禁用)
以正則匹配分隔符,把文本拆分成若干詞項,默認是\W+,即非字詞的符號作為分隔符。
2.5 Language Analyzers
組成:Stopwords、Excluding words from stemming和Reimplementing language analyzers
一組用于分析特定語言文本的分析器。 支持以下類型:阿拉伯語,亞美尼亞語,巴斯克語,孟加拉語,巴西語,保加利亞語,加泰羅尼亞語,cjk,捷克語,丹麥語,荷蘭語,英語,愛沙尼亞語,芬蘭語,法語,加利西亞語,德語,希臘語,印度語,匈牙利語,印度尼西亞語,愛爾蘭語,意大利語,拉脫維亞語,立陶宛語,挪威語,波斯語,葡萄牙語,羅馬尼亞語,俄羅斯,索拉尼語,西班牙語,瑞典語,土耳其語,泰國語。
以正則匹配詞項,速度比pattern tokenizer快。
2.6 Whitespace Analyzer
組成:Whitespace Tokenizer
在處理文本時以空格字符為區分進行分詞,該分詞器在中文分詞上基本不被使用
2.7 Keyword Analyzer
組成:Keyword Analyzer
不分詞,直接將輸入作為一個單詞輸出。
2.8 Fingerprint Analyzer
組成:Standard Tokenizer、Lower Case Token Filter、ASCII folding、Stop Token Filter (默認禁用)和Fingerprint
很特殊的一種分析器,輸入文本較低,規范化以刪除擴展字符,排序,重復數據刪除并連接到單個令牌。 如果配置了一個停用詞列表,停止單詞也將被刪除。
2.9自定義分析器:custom analyzer
當內置分析器不能滿足您的需求時,您可以創建一個custom分析器,它使用以下相應的組合:
- 零個或多個字符過濾器
- 一個分析器
- 零個或多個token過濾器
分析器接受以下的參數:
- char_filter:內置或自定義字符過濾器 。
- token filter:內置或自定義token filter 。
- tokenizer:內置或自定義分詞器。
- position_increment_gap:在索引文本值數組時,Elasticsearch會在一個值的最后一個值和下一個值的第一個項之間插入假的“間隙”,以確保短語查詢與不同數組元素的兩個術語不匹配。 默認為100。
2.10 中文分析器
2.10.1 IK Analyzer (使用頻率很高的,對搜索要求不高的建議選用)
免費開源的java分詞器,目前比較流行的中文分詞器之一,簡單,穩定,想要特別好的效果,需要自行維護詞庫,支持自定義詞典。
安裝和部署
- ik下載地址:https://github.com/medcl/elasticsearch-analysis-ik
- Github加速器:https://github.com/fhefh2015/Fast-GitHub
- 創建插件文件夾 cd your-es-root/plugins/ && mkdir ik
- 將插件解壓縮到文件夾 your-es-root/plugins/ik
- 重新啟動es
IK文件描述
- IKAnalyzer.cfg.xml:IK分詞配置文件
- 主詞庫:main.dic
- 英文停用詞:stopword.dic,不會建立在倒排索引中
- 特殊詞庫:
- quantifier.dic:特殊詞庫:計量單位等
- suffix.dic:特殊詞庫:行政單位
- surname.dic:特殊詞庫:百家姓
- preposition:特殊詞庫:語氣詞
- 自定義詞庫:網絡詞匯、流行詞、自造詞等
ik提供的兩種analyzer:
熱更新
2.10.2 Smart Chinese Analysis
官方提供的中文分析器,不好用
2.10.3 HanLP (推薦)
HanLP是一系列模型與算法組成的NLP工具包,由大快搜索主導并完全開源,目標是普及自然語言處理在生產環境中的應用。HanLP具備功能完善、性能高效、架構清晰、語料時新、可自定義的特點。
總結
本文寫到這里就結束了,后續博主會不定時更新文章,歡迎指正。
著作權歸NoLongerConfused所有。商業轉載請聯系NoLongerConfused獲得授權,非商業轉載請注明出處。
總結
以上是生活随笔為你收集整理的Elasticsearch---Analyzer(分析器)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 屏幕适配终结者
- 下一篇: 开源生态学初探——从生命游戏开始