相信你們在開發博客,在線商城的時候會涉及到搜索功能。而近幾年火起來的 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":"國武公司近日上市" } } ] } }
固然,若是對分詞有特定需求的小夥伴能夠在配置裏修改對應的參數。目前,玻森數據對於中文分詞提供了繁簡轉換、新詞發現等功能,能知足不一樣領域的搜索需求。
但願這款插件能提高你的工做效率!