Elasticsearch全文檢索中文分詞:IK分詞器詳解與Docker環境集成

目錄

  • 一、IK分詞器介紹與選擇
    • 1. IK分詞器詳細介紹
      • 1.1 基本概念
      • 1.2 核心功能
      • 1.3 適用場景
    • 2. 如果不使用IK分詞器,有哪些替代方案?
      • 2.1 默認分詞器的局限性
      • 2.2 替代方案及對比
      • 2.3 示例:Ngram Tokenizer配置
    • 3. 如何選擇分詞器?
      • 3.1 決策建議
      • 3.2 替代方案實操建議
    • 4. 最終結論
  • 二、Docker 單機部署 ES 并配置 IK 分詞器
    • 1. 通過 Dockerfile 構建自定義鏡像
      • 1.1 創建項目目錄結構
      • 1.2 下載 IK 分詞器插件
      • 1.3 創建 Dockerfile
      • 1.4 構建鏡像
      • 1.5 啟動容器
    • 2. 通過卷掛載插件
      • 2.1 下載并解壓IK分詞器
      • 2.2 啟動容器并掛在插件
    • 3. 驗證 IK 分詞器安裝
      • 3.1 檢查插件列別
      • 3.2 測試分詞效果
    • 4. 配置自定義詞典
    • 5. 常見問題解決
      • 5.1 插件加載失敗
      • 5.2 權限不足
      • 5.3 自定義詞典未生效

一、IK分詞器介紹與選擇

1. IK分詞器詳細介紹

1.1 基本概念

IK分詞器(IK Analyzer)是Elasticsearch中廣泛使用的中文分詞插件,專門針對中文文本進行高效的分詞處理。它支持兩種分詞模式:

  • ik_max_word(細粒度切分):盡可能多地拆分出詞語,適合提高搜索召回率。
    示例:
    輸入:"身份證號:123456"
    輸出:["身份", "證", "號", "123456"]
  • ik_smart(智能切分):按最粗粒度合并詞語,適合提高搜索準確率。
    示例:
    輸入:"身份證號:123456"
    輸出:["身份證號", "123456"]

1.2 核心功能

  • 中文分詞:解決中文無空格分隔的難題。
  • 自定義詞典:支持用戶擴展專有名詞(如人名、品牌名)或過濾停用詞。
# 自定義詞典文件(my_dict.dic)
王者榮耀
微信支付
  • 兼容性:與Elasticsearch無縫集成,無需額外編碼。

1.3 適用場景

  • 全文檢索:如搜索“張三的身份證號”,能命中包含“張三”和“身份證號”的文檔。
  • 精確匹配:結合keyword字段實現完整短語匹配。
  • 專業領域:通過自定義詞典支持法律、醫療等專業術語。

2. 如果不使用IK分詞器,有哪些替代方案?

2.1 默認分詞器的局限性

Elasticsearch默認的standard分詞器會按單個漢字切分中文,效果極差:

  • 輸入:"身份證號" → 輸出:["身", "份", "證", "號"]
  • 問題:搜索“身份證”無法命中“身份證號”。

2.2 替代方案及對比

分詞方案優點缺點適用場景
ICU分詞器支持多語言,內置中文基礎分詞分詞粒度較粗,專業術語支持弱多語言混合文本
Ngram Tokenizer無需詞典,按N-gram切分索引膨脹嚴重,檢索效率低短文本、簡單搜索
HanLP/THULAC插件分詞精度高,支持語義分析安裝復雜,性能開銷較大高精度要求的專業領域
拼音分詞器支持拼音搜索(如“zhangsan→張三”)需額外存儲拼音字段,占用空間中文拼音混合搜索場景

2.3 示例:Ngram Tokenizer配置

PUT /image_ocr_index
{"settings": {"analysis": {"analyzer": {"ngram_analyzer": {"tokenizer": "ngram_tokenizer"}},"tokenizer": {"ngram_tokenizer": {"type": "ngram","min_gram": 2,"max_gram": 3}}}},"mappings": {"properties": {"texts.content": {"type": "text","analyzer": "ngram_analyzer"}}}
}
  • 行為:將“張三”切分為["張三", "張", "三"]min_gram=2時僅生成["張三"])。
  • 缺點:索引體積可能增長5~10倍,且搜索結果包含大量噪聲。

3. 如何選擇分詞器?

3.1 決策建議

  • 必須使用IK的情況
    需要精準中文分詞(如法律合同、身份證信息提取)。
  • 可不用IK的情況
    • 數據以英文為主,中文為輔。
    • 僅需簡單匹配(如按完整字段值搜索)。
    • 資源有限,無法安裝第三方插件。

3.2 替代方案實操建議

  1. ICU分詞器(內置,無需安裝):
PUT /image_ocr_index
{"settings": {"analysis": {"analyzer": {"icu_analyzer": {"tokenizer": "icu_tokenizer"}}}}
}
  • 效果:"身份證號"["身份", "證", "號"](優于默認分詞器)。
  1. Ngram + 同義詞過濾
    通過同義詞表合并常用詞,減少噪聲。

4. 最終結論

  • 推薦方案:優先使用IK分詞器,通過ik_max_word提高召回率,結合content.keyword實現精確匹配。
  • 妥協方案:若無IK,選擇ICU分詞器Ngram+同義詞過濾,但需接受精度下降。
  • 高級場景:專業領域(如醫學)可嘗試HanLP,但需評估性能成本。

二、Docker 單機部署 ES 并配置 IK 分詞器

1. 通過 Dockerfile 構建自定義鏡像

1.1 創建項目目錄結構

mkdir -p elasticsearch-ik-docker/plugins
cd elasticsearch-ik-docker

1.2 下載 IK 分詞器插件

  • 確保下載與 Elasticsearch 8.4.3 兼容的版本
  • IK分詞器下載地址:Index of: analysis-ik/stable/
wget -P plugins/ https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.4.3/elasticsearch-analysis-ik-8.4.3.zip
unzip plugins/elasticsearch-analysis-ik-8.4.3.zip -d plugins/ik

1.3 創建 Dockerfile

# elasticsearch-ik-docker/Dockerfile
FROM docker.elastic.co/elasticsearch/elasticsearch:8.4.3
# 復制 IK 分詞器到插件目錄
COPY plugins/ik /usr/share/elasticsearch/plugins/ik
# 可選:添加自定義詞典(需提前準備好)
# COPY custom_dict.dic /usr/share/elasticsearch/plugins/ik/config/custom_dict.dic
# 確保插件目錄權限正確
USER root
RUN chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins
USER elasticsearch

1.4 構建鏡像

docker build -t elasticsearch-ik:8.4.3 .

1.5 啟動容器

docker run -d \--name elasticsearch \-p 9200:9200 \-p 9300:9300 \-e "discovery.type=single-node" \-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \elasticsearch-ik:8.4.3

2. 通過卷掛載插件

2.1 下載并解壓IK分詞器

mkdir -p ~/es-plugins/ik
wget -O ~/es-plugins/ik/ik.zip https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.4.3/elasticsearch-analysis-ik-8.4.3.zip
unzip ~/es-plugins/ik/ik.zip -d ~/es-plugins/ik

2.2 啟動容器并掛在插件

docker run -d \--name elasticsearch \-p 9200:9200 \-p 9300:9300 \-v ~/es-plugins/ik:/usr/share/elasticsearch/plugins/ik \-e "discovery.type=single-node" \docker.elastic.co/elasticsearch/elasticsearch:8.4.3

3. 驗證 IK 分詞器安裝

3.1 檢查插件列別

# 檢查插件列表,輸出應包含: analysis-ik
docker exec elasticsearch /usr/share/elasticsearch/bin/elasticsearch-plugin list
# 測試分詞效果
curl -X POST "http://10.0.31.221:9200/_analyze" -H 'Content-Type: application/json' -d '{"analyzer": "ik_max_word","text": "身份證號:123456"}'

3.2 測試分詞效果

curl -X POST "http://localhost:9200/_analyze" -H 'Content-Type: application/json' -d'
{"analyzer": "ik_max_word","text": "身份證號:123456"
}'
  • 預期輸出
{"tokens": [{"token":"身份", "start_offset":0, "end_offset":2, "type":"CN_WORD", "position":0},{"token":"證", "start_offset":2, "end_offset":3, "type":"CN_CHAR", "position":1},{"token":"號", "start_offset":3, "end_offset":4, "type":"CN_CHAR", "position":2},{"token":"123456", "start_offset":5, "end_offset":11, "type":"ARABIC", "position":3}]
}

4. 配置自定義詞典

  • 準備詞典文件
echo "自定義術語" > ~/es-plugins/ik/config/custom_dict.dic
  • 修改IK配置文件,編輯 ~/es-plugins/ik/config/IKAnalyzer.cfg.xml
<entry key="ext_dict">custom_dict.dic</entry>
  • 重啟容器
docker restart elasticsearch

5. 常見問題解決

5.1 插件加載失敗

  • 現象:日志提示 Plugin [analysis-ik] was built for Elasticsearch version x.x.x
  • 解決:確保 IK 版本與 Elasticsearch 完全一致(此處必須為 8.4.3)。

5.2 權限不足

  • 現象:容器啟動失敗,日志報錯 Permission denied
  • 解決:確保掛載的插件目錄權限正確
chmod -R 755 ~/es-plugins/ik

5.3 自定義詞典未生效

  • 現象:新增詞匯未識別
  • 解決:確認詞典文件路徑正確,且配置文件修改后重啟容器。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93760.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93760.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93760.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實用軟件推薦

作者給大家推薦兩個軟件&#xff1a;typedown,typora typedown在microsoft上即可下載&#xff0c;免費 如果有更多的需求建議下載typora,typora為付費軟件 typora官網&#xff1a;typora官網 typedown下載&#xff1a;typedown下載 作者曾經發布的一些以"md"為后…

地圖導航怎么測?

地圖導航的測試需要結合功能驗證、性能評估和場景模擬等多維度方法,以下是基于行業標準和實踐的系統化測試方案: 一、核心測試維度與方法 (一)功能測試:覆蓋導航全流程 1、基礎功能驗證 路線規劃:輸入起點 / 終點后,驗證系統是否能生成最短、最快或避開擁堵的路線,并…

力扣70:爬樓梯

力扣70:爬樓梯題目思路代碼題目 假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢&#xff1f; 思路 首先我們先列出來前幾個臺階的答案從第一個開始&#xff1a;1&#xff0c;2&#xff0c;3&#xff0c;5。…

CoRL 2025|隱空間擴散世界模型LaDi-WM大幅提升機器人操作策略的成功率和跨場景泛化能力

內容源自計算機科研圈在機器人操作任務中&#xff0c;預測性策略近年來在具身人工智能領域引起了廣泛關注&#xff0c;因為它能夠利用預測狀態來提升機器人的操作性能。然而&#xff0c;讓世界模型預測機器人與物體交互的精確未來狀態仍然是一個公認的挑戰&#xff0c;尤其是生…

Rust 入門 生命周期-next2 (十九)

生命周期消除實際上&#xff0c;對于編譯器來說&#xff0c;每一個引用類型都有一個生命周期&#xff0c;那么為什么我們在使用過程中&#xff0c;很多時候無需標注生命周期&#xff1f;例如&#xff1a;fn first_word(s: &str) -> &str {let bytes s.as_bytes();f…

Three.js 動畫循環學習記錄

在上一篇文章中&#xff0c;我們學習了Three.js 坐標系系統與單位理解教程&#xff1a; Three.js 坐標系系統與單位理解教程 接下來我們要學習的是Three.js 的動畫循環 一、動畫循環基礎原理 1. 什么是動畫循環&#xff1f; 動畫循環是連續更新場景狀態并重新渲染的過程&am…

ktg-mes 改造成 Saas 系統

ktg-mes 改造成 Saas 系統 快速檢驗市場&#xff0c;采用最簡單的方案&#xff0c;即添加表字段 截止2025年8月16日上傳的ktg-mes搭建存在一些問題&#xff0c;搭建可看文章&#xff1a; 搭建ktg-mes 改造 1. 添加租戶表 create table sys_tenant (tenant_id bigint au…

【新手易混】find 命令中 -perm 選項的知識點

find 命令是 Linux/Unix 系統中強大的文件查找工具&#xff0c;廣泛用于根據文件名、類型、時間、權限等條件搜索文件。其中&#xff0c;-perm 選項用于按文件權限查找文件&#xff0c;而在 -perm /mode 中出現的斜杠 / 是一種特殊的語法&#xff0c;表示“按位或&#xff08;O…

gdb的load命令和傳給opeocd的monitor flash write_image erase命令的區別

問&#xff1a; "monitor flash write_image erase ${workspaceFolder}/obj/ylad_led_blink.elf", 和 "load", "executable" : "${workspaceFolder}/obj/ylad_led_blink.elf", 的區別&#xff1f;答&#xff1a; 你提到的 "monit…

1. Docker的介紹和安裝

文章目錄1. Docker介紹核心概念核心優勢與虛擬機的區別一句話總結2. Docker的安裝Windows 10/11 安裝 Docker Desktop&#xff08;推薦 WSL2 方式&#xff09;Linux&#xff08;以 Ubuntu / Debian 系為例&#xff09;Docker 是一個開源的容器化平臺&#xff0c;它允許開發者將…

fastdds.ignore_local_endpoints 屬性

Fast DDS 的 fastdds.ignore_local_endpoints 屬性用于控制同一 DomainParticipant 下的本地端點&#xff08;即 DataWriter 和 DataReader&#xff09;是否自動匹配。以下是對該功能的詳細解釋&#xff0c;并翻譯為中文&#xff0c;結合其上下文、實現原理和使用場景&#xff…

華清遠見25072班C語言學習day11

重點內容:函數&#xff1a;定義&#xff1a;返回值類型 函數名(參數列表) { //函數體 }函數的參數列表中可以有多個數據返回值&#xff1a;如果函數沒有返回值可以寫成void 返回值的作用&#xff0c;函數的結果用來返回給主調函數的&#xff0c;如果主調函數處不需要函數的結果…

視覺語言導航(7)——VLN的數據集和評估方法 3.2

這是課上做的筆記&#xff0c;因此很多記得比較急&#xff0c;之后會逐步完善&#xff0c;每節課的邏輯流程寫在大綱部分。成功率(SR)導航誤差(NE)成功加權路徑長度&#xff08;SucceedPLength&#xff09;軌跡長度&#xff08;TL&#xff09;先知成功率&#xff08;OS&#xf…

ElasticSearch不同環境同步索引數據

目的&#xff1a;在生產環境把一個索引的數據同步到測試環境中1、在生產環境導出json數據curl -u "adims_user:xkR%cHwR5I9g" -X GET "http://172.18.251.132:9200/unify_info_mb_sp_aggregatetb_0004/_search?scroll1m" -H Content-Type: applicatio…

咨詢進階——解讀咨詢顧問技能模型

適應人群為咨詢行業從業者、咨詢團隊管理者、想提升咨詢技能的職場人士及咨詢公司培訓人員。主要內容圍繞咨詢顧問技能模型展開,核心包括五大核心能力(解決問題能力,涵蓋洞察力、分析技巧、問題構建等,從識別問題實質到構建新分析方法分層次闡述;管理能力,涉及管理他人與…

2025年- H98-Lc206--51.N皇后(回溯)--Java版

1.題目描述2.思路 二維數組集合 (1&#xff09;N皇后規則 1&#xff09;不能同行&#xff08;同一行不能出現2個皇后&#xff09; 2&#xff09;不能同列&#xff08;同一列不能出現2個皇后&#xff09; 3&#xff09;不能說45度或135度&#xff08;斜對角線不能出現2個皇后&am…

5G + AI + 云:電信技術重塑游戲生態與未來體驗

在數字娛樂蓬勃發展的今天&#xff0c;游戲產業已然成為科技創新的前沿陣地。電信網絡也經歷了一場深刻的蛻變&#xff0c;從最初僅僅是 “內容傳輸管道”&#xff0c;搖身一變成為與游戲深度綁定的技術共生體。5G 不斷刷新著體驗的邊界&#xff0c;AI 徹底顛覆傳統的創作模式&…

【React Hooks】封裝的藝術:如何編寫高質量的 React 自-定義 Hooks

【React Hooks】封裝的藝術&#xff1a;如何編寫高質量的 React 自-定義 Hooks 所屬專欄&#xff1a; 《前端小技巧集合&#xff1a;讓你的代碼更優雅高效》 上一篇&#xff1a; 【React State】告別 useState 濫用&#xff1a;何時應該選擇 useReducer 作者&#xff1a; 碼力…

華為GaussDB的前世今生:國產數據庫崛起之路

在數據庫領域&#xff0c;華為GaussDB已成為一顆耀眼的明星&#xff0c;為企業核心業務數字化轉型提供堅實的數據底座。但這并非一蹴而就&#xff0c;其背后是長達二十余年的技術沉淀、戰略投入與持續創新。本文將深入探尋華為GaussDB的歷史沿革與核心技術細節&#xff0c;展現…

數據結構初階(16)排序算法——歸并排序

2.4 歸并排序 歸并排序&#xff08;Merge Sort&#xff09;是基于分治思想的經典排序算法。核心邏輯&#xff1a; 分而治之——把復雜排序問題拆分成簡單子問題解決&#xff0c;再合并子問題的結果。聯系鏈表的合并&#xff1a;兩個有序鏈表l1、l2創建新鏈表l3&#xff08;帶頭…