Elasticsearch 默認分詞器和中分分詞器之間的比較及使用方法

Elasticsearch內置了不少分詞器,但大多數是針對英文的分詞器.下面比較一下系統默認的分詞器和經常使用中文分詞器的區別及使用方法html

系統默認分詞器

1. standard分詞器

默認分析儀,若是未指定則使用該分詞器, 它會將英文詞彙單元轉換成小寫形式,並去除停用詞和標點符號. 支持中文采用的方法爲單字切分java

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.htmlgit

2. simple分詞器

首先會經過非字母字符來分割文本信息,而後將詞彙單元統一爲小寫形式,該分析器會去掉數字類型的字符.對中文不進行分詞github

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-simple-analyzer.html正則表達式

3. stop 分詞器

在simple分詞器的基礎上增長了去除英文經常使用單詞(如the, a 等).也能夠自定義要去除的經常使用單詞.對中文不進行分詞app

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-stop-analyzer.htmlelasticsearch

4. whitespace 分詞器

僅僅是去除空格,對字符沒有lowcase化.不對生成的詞彙單元進行其餘的規範化處理.對中文不進行分詞maven

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-whitespace-analyzer.htmlide

5. keyword分詞器

Keyword分詞器把整個輸入做爲一個單獨詞彙單元(也就是對英文不進行分詞),方便特殊類型的文本進行索引和檢索.針對郵政編碼,地址等文本信息使用關鍵詞分詞器進行索引項創建很是方便.對中文不進行分詞工具

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-keyword-analyzer.html

6. pattern分詞器

使用正則表達式進行分詞.不支持中文

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pattern-analyzer.html

7. language分詞器

一個用於解析特殊語言文本的analyzer集合。( arabic,armenian, basque, brazilian, bulgarian, catalan, cjk, czech, danish, dutch, english, finnish, french,galician, german, greek, hindi, hungarian, indonesian, irish, italian, latvian, lithuanian, norwegian,persian, portuguese, romanian, russian, sorani, spanish, swedish, turkish, thai.)沒有中文

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html

8. fingerprint分詞器

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-fingerprint-analyzer.html

中文分詞器

1. ik-analyzer

IKAnalyzer是一個開源的,基於java語言開發的輕量級的中文分詞工具包.

安裝

cd elasticsearch-6.4.2
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.2/elasticsearch-analysis-ik-6.4.2.zip

ik帶有兩個分詞器

ik_max_word: 細粒度分詞, 會將文本作最細粒度的拆分.

ik_smart: 粗粒度分詞, 會將文本作最粗粒度的拆分.

POST _analyze
{
  "analyzer": "ik_max_word",
  "text": "中華人民共和國國歌"
}

結果
[中華人民共和國, 中華人民, 中華, 華人, 人民共和國, 人民, 共和國, 共和, 國, 國歌]
POST _analyze
{
  "analyzer": "ik_smart",
  "text": "中華人民共和國國歌"
}


結果
[中華人民共和國, 國歌]

2. pinyin分詞器

將中文轉換爲拼音,將拼音進行分詞

POST _analyze
{
  "analyzer": "pinyin",
  "text": "李小龍"
}

結果
[li, xiao, logn, lxl]

下載後解壓縮

elasticsearch-analysis-pinyin下載網址:github.com/medcl/elast… 

查看修改pom.xml文件中對應elasticsearch的版本號

<elasticsearch.version>6.4.2</elasticsearch.version>

在解壓縮的文件夾目錄下,執行mvn打包命令(沒有maven的自行下載): 

mvn package

生成target目錄, 進入target/releases目錄,解壓其中的zip壓縮包,有以下文件

將這三個文件拷貝到es安裝目錄下的plugins目錄下的pinyin文件夾中(pinyin文件夾須要本身建立,能夠任意命名).

重啓elasticsearch,拼音分詞器到此安裝完成。

PUT /pinyinTestIndex
{
    "index" : {
        "analysis" : {                          
            "analyzer" : {                           
               "default" : {                                   //默認分詞器使用ik分詞器
                     "tokenizer" : "ik_max_word"
               },
               "pinyin_analyzer" : {                           //自定義拼音分詞器
                     "tokenizer" : "my_pinyin"
               }
            },
            "tokenizer" : {
                "my_pinyin" : {                                //拼音分詞器配置
                    "type" : "pinyin",
                    "keep_first_letter":true,
                    "keep_separate_first_letter" : false,
                    "keep_full_pinyin" : false,
                    "limit_first_letter_length" : 20,
                    "lowercase" : true,
                    "keep_none_chinese":false
                 }
            }
        }
    }
}


keep_first_letter:包含首字母,例如:劉德華> ldh,default:true。
keep_separate_first_letter:將字母分割,例如:劉德華> l,d,h,default:false。
keep_full_pinyin:包含全拼拼音,例如:劉德華> [ liu,de,hua],default:true。
limit_first_letter_length:設置first_letter結果的最大長度,default:16。
lowercase:小寫非中文字母,default:true。
keep_none_chinese: 不在結果中保留非中文字母或數字,default:true。

所以,個人拼音分詞器會有以下效果 -- 若是字符串爲劉德華,通過分詞後成爲ldh,若是字符串爲劉德華A,通過分詞後成爲ldha,若是字符串爲劉德華1,通過分詞後成爲ldh1。此種分詞效果知足咱們的業務需求,固然還有其餘的配置可選,來知足不一樣的業務需求。其餘配置可參考elasticsearch-analysis-pinyin下載網址中的README.md選項進行選取。

POST /pinyinTestIndex/dev/_mapping 
{
    "dev": {
        "properties": {
            "name": {                                        //name字段
                "type": "text",                              //字符串類型支持分詞
                "analyzer": "pinyin_analyzer",               //使用拼音分詞
                 "fields": {                                 //包含的另外一種不分詞效果
                     "keyword": {                            
                        "type": "keyword",
                        "ignore_above": 256
                    }
                }
            }
        }
    }
}

未完待續.......................

相關文章
相關標籤/搜索