ElasticSearch分詞器
所謂的分詞就是透過tokenizer(分詞器)將一個字串拆分為多個獨立的tokens(詞元-獨立的單詞),然後輸出為tokens流的過程。
例如"my name is HanMeiMei"這樣一個字串就會被預設的分詞器拆分為[my,name,is HanMeiMei].ElasticSearch中提供了很多預設的分詞器,我們可以來演示看看效果
但是在ElasticSearch中提供的分詞器對中文的分詞效果都不好。
所以這時我們就需要安裝特定的分詞器 IK,在https://github.com/medcl/elasticsearch-analysis-ik 下載對應的版本,然後解壓縮
因為第一次啟動docker容器的時候進行了資料卷的掛載
docker run -d \
--name es \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.12.1
所以直接將解壓縮後的包拖到
這個目錄下
最後重啟es容器
ik分詞演示
ik_smart分詞
# 透過ik分詞器來分詞
POST /_analyze
{
"analyzer": "ik_smart"
,"text": "我是中國人,我熱愛我的祖國"
}
ik_max_word
POST /_analyze
{
"analyzer": "ik_max_word"
,"text": "我是中國人,我熱愛我的祖國"
}
擴充詞庫和停用詞典
在我們使用過程中我們會發現,一些新興詞彙不會被新增到詞庫中,如:奧裡給。。。並且不是所有的詞作者在編寫分詞器時都會知道。還有一些不敏感詞彙如“的”,“了”都會被分詞,佔用了我們一部分記憶體,所以我們需要停用這些詞彙
具體操作如下:
開啟shell控制檯,找到對應的xml檔案,在裡面進行相應的修改
然後在config目錄下新建ext.dic
直接在裡面新增你想要的詞彙就行
stopword.dic在config資料夾裡面有,就不用新建了,直接開啟新增你想要遮蔽的詞彙就行
最後重啟一下服務
最後測試一下生效了沒
能看到確實有效,ok了老鐵。還有其他更多的內容去官網上看吧。拜拜了