一行命令讓ElasticSearch支持中文分詞搜索

相信你們在開發博客,在線商城的時候會涉及到搜索功能。而近幾年火起來的 ElasticSearch(ES)憑藉其穩定、可靠、快速的實時搜索廣泛受到你們的好評,連 Github、SoundCloud 也都將 ES 做爲其核心搜索組件。html

可是 ES 自己對中文分詞和搜索比較侷限。由於內置的分析器在處理中文分詞時,只有兩種方式:一種是單字(unigrams)形式,即簡單粗暴的將中文的每個漢字做爲一個詞(token)分開;另外一種是兩字(bigrams)的,也就是任意相鄰的兩個漢字做爲一個詞分開。這兩種方式都不能很好的知足如今的中文分詞需求,進而影響了搜索結果git

舉個例子:
假設咱們的 index 裏面存儲了3篇 documents 以下:github

id content
1 美稱中國武器商很神祕 花巨資海外參展卻一聲不響
2 在第一界國際錦標賽中 國家表明李雷勇奪冠軍
3 國武公司近日上市
  • Case 1:查詢「中國」,指望只獲得 id 爲1的 document。json

用 unigram 的分析器(即默認的 Standard Analyzer)查詢結果爲 id 1和 id 2的content;bigram 的分析器(名爲cjk)的結果爲id 1。Standard Analyzer 沒有給出預期結果是由於它把「中國」切分爲「中」、「國」2個 token,所以誤給出了 id 2的結果。api

  • Case 2:查詢「國武」這一家公司,指望只獲得 id 爲3的 document。bash

Standard Analyzer 和 cjk 的查詢結果都會同時給出 id 1和 id 3的 document,可是 id 1 的 document 中的「國武」並非所指的公司。elasticsearch

(注:以上查詢均用query_string)測試

所以咱們能夠發現內置的分析器有它的侷限性,並不能知足複雜或者特定的搜索需求。爲此,玻森數據開發了一款基於玻森中文分詞的 ES 插件(Elasticsearch-Analysis-BosonNLP),方便你們對中文數據進行更精確的搜索。插件

如今已有一些成熟的 ES 中文分詞插件,但在分詞引擎準確率上,相信 BosonNLP 的中文分詞能知足你們不一樣領域上多樣化的需求。有興趣的朋友能夠查看11款開放中文分詞引擎大比拼3d

接下來,3分鐘教會你們如何安裝使用玻森 ES 中文分詞插件 Beta 版(以 ES 2.2.0 版本爲例):

  • 安裝

只需以下一個命令。

$ sudo bin/plugin install https://github.com/bosondata/elasticsearch-analysis-bosonnlp/releases/download/1.3.0-beta/elasticsearch-analysis-bosonnlp-1.3.0-beta.zip

注:對於其餘不一樣版本的 ES,只須要在命令裏更換對應的插件版本號便可。

  • 使用

須要在elasticsearch.yml文件中的 analyzer 裏配置好玻森 bosonnlp analyzer(須要配置 API_TOKEN 以及分詞的參數)。詳情解釋請查看 Github 上的README

bosonnlp:
    type: bosonnlp
    API_URL: http://api.bosonnlp.com/tag/analysis
    API_TOKEN: *PUT YOUR API TOKEN HERE*

完成以上步驟以後即可以使用玻森 ES 分詞插件了。

對比以前 Case 2 的查詢: 查詢「國武」這一家公司,指望只獲得 id 爲3的 document。玻森ES分詞插件搜索結果:

{
  "took" : 70,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
      "total" : 1,
      "max_score" : 0.15342641,
      "hits" : [ {
          "_index" : "bosonnlp_test",
          "_type" : "text",
          "_id" : "3",
          "_score" : 0.15342641,
          "_source":
{
    "content":"國武公司近日上市"
}
    } ]
  }
}

固然,若是對分詞有特定需求的小夥伴能夠在配置裏修改對應的參數。目前,玻森數據對於中文分詞提供了繁簡轉換、新詞發現等功能,能知足不一樣領域的搜索需求。

但願這款插件能提高你的工做效率!

GitHub上有具體的說明。這裏附上例子中索引 document 的 bash 文件以方便測試。

相關文章
相關標籤/搜索