ElasticSearch安裝分詞插件IK


 

ElasticSearch本身帶有分詞插件,對英文支持的很好,但對中文支持的就不好了,把中文都分成了單個文字

 

所以我們安裝一個支持中文的插件IK

1.下載安裝IK

 

 下載地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

 選擇對應的版本,我這里下載的是7.6.2的版本

下載后,解壓到安裝目錄下的plugin目錄里

 

 

 然后再重啟一下ElasticSearch

 

 看到加載了我們新安裝的插件

 

 

2.測試使用

我們使用postman來測試

 

 報錯了,analyzer參數可能是錯的,我們查一下文檔

 

我們修改一下analyzer參數為ik_max_word

 

 

{
    "tokens": [
        {
            "token": "postman",
            "start_offset": 0,
            "end_offset": 7,
            "type": "ENGLISH",
            "position": 0
        },
        {
            "token": "",
            "start_offset": 7,
            "end_offset": 8,
            "type": "CN_CHAR",
            "position": 1
        },
        {
            "token": "一個",
            "start_offset": 8,
            "end_offset": 10,
            "type": "CN_WORD",
            "position": 2
        },
        {
            "token": "",
            "start_offset": 8,
            "end_offset": 9,
            "type": "TYPE_CNUM",
            "position": 3
        },
        {
            "token": "",
            "start_offset": 9,
            "end_offset": 10,
            "type": "COUNT",
            "position": 4
        },
        {
            "token": "不錯",
            "start_offset": 10,
            "end_offset": 12,
            "type": "CN_WORD",
            "position": 5
        },
        {
            "token": "",
            "start_offset": 12,
            "end_offset": 13,
            "type": "CN_CHAR",
            "position": 6
        },
        {
            "token": "測試",
            "start_offset": 13,
            "end_offset": 15,
            "type": "CN_WORD",
            "position": 7
        },
        {
            "token": "試工",
            "start_offset": 14,
            "end_offset": 16,
            "type": "CN_WORD",
            "position": 8
        },
        {
            "token": "工具",
            "start_offset": 15,
            "end_offset": 17,
            "type": "CN_WORD",
            "position": 9
        }
    ]
}

 

  這次是正確的啦,是我們想要的結果了。

 

3.其他

a)附帶了解一下Analyzer與Tokenizer

https://blog.csdn.net/u014078154/article/details/80135703

Analyzer包含兩個核心組件,Tokenizer以及TokenFilter。兩者的區別在於,前者在字符級別處理流,而后者則在詞語級別處理流。Tokenizer是Analyzer的第一步,其構造函數接收一個Reader作為參數,而TokenFilter則是一個類似的攔截器,其參數可以是TokenStream、Tokenizer。

  1)Tokenizer
  輸入為Reader的TokenStream,其子類必須實現incrementToken()函數,並且在設置屬性(attributes) 必須調用AttributeSource中的clearAttributes()方法。

 

b)ik_max_word 和 ik_smart 什么區別?

https://github.com/medcl/elasticsearch-analysis-ik

 

ik_max_word: 會將文本做最細粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,中華人民,中華,華人,人民共和國,人民,人,民,共和國,共和,和,國國,國歌”,會窮盡各種可能的組合,適合 Term Query;

ik_smart: 會做最粗粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,國歌”,適合 Phrase 查詢。

 


免責聲明!

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



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