在ElasticSearch中使用 IK 中文分詞插件


我這里集成好了一個自帶IK的版本,下載即用,

https://github.com/xlb378917466/elasticsearch5.2.include_IK

 添加了IK插件意味着你可以使用ik_smart(最粗粒度的拆分)ik_max_word(最細粒度的拆分)兩種analyzer

 你也可以從下面這個地址獲取最新的IK源碼,自己集成,

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

里面還提供了使用說明,可以很快上手。

一般使用elasticsearch-head測試比較方便。

這個IK分詞插件挺好用的,支持自定義分詞,更重要的是支持熱更新。

比如上面這個應用程序層是被分成了兩個詞,如果你把應用程序層作為一個詞添加到你的自定義詞典中,那么結果就會發生微妙的變化,通過這樣不斷的完善詞庫,相信搜索的體驗會越來越好。

現在IK分詞插件也算集成好了,如何使用?

首先新建一個索引,並且給這個索引下的文檔類型設置Mapping關系

這里還是繼續使用昨天新建的索引twitter作例子,所以只需要給文檔類型tweet 新建一個字段Content,並設置這一個字段的Mapping來舉例:

http://localhost:9200/twitter/_mapping/tweet/

{
  "properties": {
    "content": {
      "type": "text",
      "store": "no",
      "term_vector": "with_positions_offsets",
      "analyzer": "ik_smart",
      "search_analyzer": "ik_smart",
      "include_in_all": "true",
      "boost": 8
    }
  }
}

 這樣一來,后面添加的Content就會使用ik_smart來分詞,

添加一條測試數據:

http://localhost:9200/twitter/tweet/1/  選擇Put  Method

{
  "content": "應用程序層是一個附加層"
}

 查詢測試:

http://localhost:9200/twitter/_search/

使用POST Method,因為我使用ElasticSearch Head 在Get的情況下不返回highlight信息

{
  "query" : { "match" : { "content" : "應用程序層是一個附加層" }},
  "highlight" : {
        "pre_tags" : ["<tag1>", "<tag2>"],
        "post_tags" : ["</tag1>", "</tag2>"],
        "fields" : {
            "content" : {}
        }
    }
}

 返回如下:

 

使用應用程序關鍵詞是搜不到內容的,因為分詞器不識別 這個詞,就是說你要用被你拆分之后的詞來搜索,才有匹配的記錄。

 

比如下面幾個就是被拆分出來的詞

 

 


免責聲明!

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



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