Elasticsearch實踐(四) IK分詞

2022-02-01 00:28:15 字數 3388 閱讀 5683

環境:elasticsearch 6.2.4 + kibana 6.2.4 + ik 6.2.4

elasticsearch預設也能對中文進行分詞。

我們先來看看自帶的中文分詞效果:

get /_analyze

結果:

,,,

,,

]}

我們發現,是按照每個字進行分詞的。這種在實際應用裡肯定達不到想要的效果。當然,如果是日誌搜尋,使用自帶的就足夠了。

analyzer=default其實呼叫的是standard分詞器。

接下來,我們安裝ik分詞外掛程式進行分詞。

首先需要說明的是,ik外掛程式必須和 elasticsearch 的版本一致,否則不相容。

plugin-descriptor.properties然後重啟 elasticsearch。

安裝方法2:

./usr/local/elk/elasticsearch-6.2.4/bin/elasticsearch-plugin install
./usr/local/elk/elasticsearch-6.2.4/bin/elasticsearch-plugin install file:///tmp/elasticsearch-analysis-ik-6.2.4.zip
然後重啟 elasticsearch。

ik支援兩種分詞模式(analyzer):

支援兩種tokenizer:

注:analyzer由tokenizer組成。

接下來,我們測算ik分詞效果和自帶的有什麼不同:

結果:

,

]}

再試一下ik_max_word的效果:

,,,

,]}

示例:

}}

注:這裡設定search_analyzeranalyzer相同是為了確保搜尋時和索引時使用相同的分詞器,以確保查詢中的術語與反向索引中的術語具有相同的格式。如果不設定search_analyzer,則search_analyzeranalyzer相同。詳細請查閱:

我們也可以定義自己的詞典供ik使用。比如:

結果:

,

,]}

我們希望朝陽公園作為乙個整體,這時候可以把該詞加入到自己的詞典裡。

新建自己的詞典只需要簡單幾步就可以完成:

1、在elasticsearch-6.2.4/config/analysis-ik/目錄增加乙個my.dic:

$ touch my.dic

$ echo 朝陽公園 > my.dic

$ cat my.dic

朝陽公園

$ head -n 5 main.dic

一一枚舉

一一對應

一一道來

一丁一丁不識

2、然後修改elasticsearch-6.2.4/config/analysis-ik/ikanalyzer.cfg.xml檔案:

<?xml version="1.0" encoding="utf-8"?>

ik analyzer 擴充套件配置

my.dic

增加了my.dic,然後重啟es。我們再看一下效果:

get /_analyze

結果:

,

]}

說明自定義詞典生效了。如果有多個詞典,使用英文分號隔開:

my.dic;custom/single_word_low_freq.dic
另外,我們看到配置裡還有個擴充套件停止詞字典,這個是用來輔助斷句的。我們可以看一下自帶的乙個擴充套件停止詞字典

$ head -n 5 extra_stopword.dic也了

仍從以

也就是ik分詞器遇到這些詞就認為前面的詞語不會與這些詞構成詞語。

ik分詞也支援遠端詞典,遠端詞典的好處是支援熱更新。詞典格式和本地的一致,都是一行乙個分詞(換行符用\n),還要求填寫的url滿足:

該 http 請求需要返回兩個頭部(header),乙個是 last-modified,乙個是 etag,這兩者都是字串型別,只要有乙個發生變化,該外掛程式就會去抓取新的分詞進而更新詞庫。
詳見: 熱更新 ik 分詞使用方法 部分。

注意:上面的示例裡我們改的是elasticsearch-6.2.4/config/analysis-ik/目錄下內容,是因為ik是通過方法2裡elasticsearch-plugin安裝的。如果你是通過解壓方式安裝的,那麼ik配置會在plugins目錄,即:elasticsearch-6.2.4/plugins/analysis-ik/config。也就是說外掛程式的配置既可以放在外掛程式所在目錄,也可以放在elasticsearch的config目錄裡面。

es自帶了許多內建的analyzer分析器,無需配置就可以直接在index中使用:

詳見文件:

1、medcl/elasticsearch-analysis-ik: the ik analysis plugin integrates lucene ik analyzer into elasticsearch, support customized dictionary.

2、elesticsearch ik中文分詞使用詳解 - xsdxs的部落格 - csdn部落格

Elasticsearch探索實踐(一)

elasticsearch是乙個開源的分布式 restful 風格的搜尋和資料分析引擎,它的底層是開源庫apache lucene。lucene 可以說是當下最先進 高效能 全功能的搜尋引擎庫 無論是開源還是私有,但它也僅僅只是乙個庫。為了充分發揮其功能,你需要使用 j a 並將 lucene 直接...

elasticsearch配置詳解

elasticsearch的config資料夾裡面有兩個配置檔案 elasticsearch.yml和logging.yml,第乙個是es的基本配置檔案,第二個是日誌配置檔案,es也是使用log4j來記錄日誌的,所以logging.yml裡的設定按普通log4j配置檔案來設定就行了。下面主要講解下e...

誰在使用Elasticsearch

github github使用elasticsearch搜尋20tb的資料,包括13億的檔案和1300億行的 這個不用介紹了吧,碼農們都懂的,github在2013年1月公升級了他們的 搜尋,由solr轉為elasticsearch,目前集群規模為26個索引儲存節點和8個客戶端節點 負責處理搜尋請求...