一行命令让ElasticSearch支持中文分词搜索
相信大家在開發博客,在線商城的時候會涉及到搜索功能。而近幾年火起來的 ElasticSearch(ES)憑借其穩定、可靠、快速的實時搜索普遍受到大家的好評,連 Github、SoundCloud 也都將 ES 作為其核心搜索組件。
但是 ES 本身對中文分詞和搜索比較局限。因為內置的分析器在處理中文分詞時,只有兩種方式:一種是單字(unigrams)形式,即簡單粗暴的將中文的每一個漢字作為一個詞(token)分開;另一種是兩字(bigrams)的,也就是任意相鄰的兩個漢字作為一個詞分開。這兩種方式都不能很好的滿足現在的中文分詞需求,進而影響了搜索結果。
舉個例子:
假設我們的 index 里面存儲了3篇 documents 如下:
| 1 | 美稱中國武器商很神秘 花巨資海外參展卻一言不發 |
| 2 | 在第一界國際錦標賽中 國家代表李雷勇奪冠軍 |
| 3 | 國武公司近日上市 |
Case 1:查詢“中國”,期望只得到 id 為1的 document。
用 unigram 的分析器(即默認的 Standard Analyzer)查詢結果為 id 1和 id 2的content;bigram 的分析器(名為cjk)的結果為id 1。Standard Analyzer 沒有給出預期結果是因為它把“中國”切分為“中”、“國”2個 token,因此誤給出了 id 2的結果。
Case 2:查詢“國武”這一家公司,期望只得到 id 為3的 document。
Standard Analyzer 和 cjk 的查詢結果都會同時給出 id 1和 id 3的 document,但是 id 1 的 document 中的“國武”并不是所指的公司。
(注:以上查詢均用query_string)
因此我們可以發現內置的分析器有它的局限性,并不能滿足復雜或者特定的搜索需求。為此,玻森數據開發了一款基于玻森中文分詞的 ES 插件(Elasticsearch-Analysis-BosonNLP),方便大家對中文數據進行更精確的搜索。
現在已有一些成熟的 ES 中文分詞插件,但在分詞引擎準確率上,相信 BosonNLP 的中文分詞能滿足大家不同領域上多樣化的需求。有興趣的朋友可以查看11款開放中文分詞引擎大比拼。
接下來,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: bosonnlpAPI_URL: http://api.bosonnlp.com/tag/analysisAPI_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 文件以方便測試。
總結
以上是生活随笔為你收集整理的一行命令让ElasticSearch支持中文分词搜索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swift2.2的新特性
- 下一篇: ORA-01172,ORA-01151