溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

elasticsearch 5.x中IK分詞器怎么用

發布時間:2021-10-19 16:09:06 來源:億速云 閱讀:114 作者:柒染 欄目:大數據

Elasticsearch 5.x中IK分詞器怎么用

前言

Elasticsearch作為一款強大的開源搜索引擎,其核心功能之一就是全文檢索。而全文檢索的基礎是分詞(Analysis),即將文本拆分成有意義的詞語單元。對于中文搜索而言,由于中文沒有像英文那樣明顯的空格分隔,因此需要專門的中文分詞器來處理。

IK分詞器(IK Analyzer)是一款優秀的中文分詞插件,專門為Elasticsearch設計。它支持細粒度切分和智能切分兩種分詞模式,能夠較好地處理中文文本。本文將詳細介紹在Elasticsearch 5.x版本中如何安裝、配置和使用IK分詞器。

一、IK分詞器簡介

IK分詞器是基于開源項目Lucene的Analyzer接口實現的中文分詞組件,主要包含以下特性:

  1. 兩種分詞模式

    • ik_smart:智能切分,傾向于較長的詞語組合
    • ik_max_word:細粒度切分,盡可能多地切分出詞語
  2. 支持自定義詞典

    • 可以擴展主詞典和停用詞詞典
    • 支持熱更新詞典,無需重啟ES集群
  3. 兼容性好

    • 支持Elasticsearch多個版本
    • 支持Lucene的Analyzer接口

二、安裝IK分詞器

1. 下載對應版本

首先需要下載與Elasticsearch 5.x版本兼容的IK分詞器插件??梢詮囊韵碌刂帆@?。?/p>

確保下載的版本與你的Elasticsearch版本匹配。例如Elasticsearch 5.6.16對應的IK分詞器版本可能是5.6.16。

2. 安裝方式

Elasticsearch插件有兩種安裝方式:

方式一:使用elasticsearch-plugin命令行安裝

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.16/elasticsearch-analysis-ik-5.6.16.zip

方式二:手動安裝

  1. 下載zip包并解壓到Elasticsearch的plugins目錄下
  2. 創建ik目錄:mkdir -p plugins/ik
  3. 將解壓后的內容復制到ik目錄下
  4. 重啟Elasticsearch服務

3. 驗證安裝

安裝完成后,可以通過以下命令驗證插件是否安裝成功:

curl -XGET 'http://localhost:9200/_cat/plugins?v'

或者在Elasticsearch啟動日志中查看是否加載了IK插件。

三、IK分詞器基本使用

1. 創建索引時指定IK分詞器

在創建索引時,可以在mapping中指定使用IK分詞器:

PUT /my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ik_smart_analyzer": {
          "type": "custom",
          "tokenizer": "ik_smart"
        },
        "ik_max_analyzer": {
          "type": "custom",
          "tokenizer": "ik_max_word"
        }
      }
    }
  },
  "mappings": {
    "my_type": {
      "properties": {
        "content": {
          "type": "text",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_smart"
        }
      }
    }
  }
}

2. 測試分詞效果

可以使用_analyzeAPI測試分詞效果:

使用ik_max_word分詞模式:

GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "中華人民共和國國歌"
}

返回結果可能類似:

{
  "tokens": [
    {
      "token": "中華人民共和國",
      "start_offset": 0,
      "end_offset": 7,
      "type": "CN_WORD",
      "position": 0
    },
    {
      "token": "中華人民",
      "start_offset": 0,
      "end_offset": 4,
      "type": "CN_WORD",
      "position": 1
    },
    {
      "token": "中華",
      "start_offset": 0,
      "end_offset": 2,
      "type": "CN_WORD",
      "position": 2
    },
    {
      "token": "華人",
      "start_offset": 1,
      "end_offset": 3,
      "type": "CN_WORD",
      "position": 3
    },
    {
      "token": "人民共和國",
      "start_offset": 2,
      "end_offset": 7,
      "type": "CN_WORD",
      "position": 4
    },
    {
      "token": "人民",
      "start_offset": 2,
      "end_offset": 4,
      "type": "CN_WORD",
      "position": 5
    },
    {
      "token": "共和國",
      "start_offset": 4,
      "end_offset": 7,
      "type": "CN_WORD",
      "position": 6
    },
    {
      "token": "共和",
      "start_offset": 4,
      "end_offset": 6,
      "type": "CN_WORD",
      "position": 7
    },
    {
      "token": "國歌",
      "start_offset": 7,
      "end_offset": 9,
      "type": "CN_WORD",
      "position": 8
    }
  ]
}

使用ik_smart分詞模式:

GET /_analyze
{
  "analyzer": "ik_smart",
  "text": "中華人民共和國國歌"
}

返回結果可能類似:

{
  "tokens": [
    {
      "token": "中華人民共和國",
      "start_offset": 0,
      "end_offset": 7,
      "type": "CN_WORD",
      "position": 0
    },
    {
      "token": "國歌",
      "start_offset": 7,
      "end_offset": 9,
      "type": "CN_WORD",
      "position": 1
    }
  ]
}

可以看到ik_max_word會盡可能多地切分出詞語,而ik_smart則會做更智能的組合。

四、自定義詞典配置

IK分詞器支持自定義詞典,可以擴展專業術語、新詞等。

1. 詞典文件位置

IK分詞器的詞典文件通常位于:

config/analysis-ik/

目錄下,主要包含:

  • main.dic:主詞典
  • quantifier.dic:量詞詞典
  • suffix.dic:后綴詞典
  • surname.dic:姓氏詞典
  • stopword.dic:停用詞詞典
  • IKAnalyzer.cfg.xml:配置文件

2. 配置自定義詞典

編輯IKAnalyzer.cfg.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>IK Analyzer 擴展配置</comment>
    <!-- 用戶可以在這里配置自己的擴展字典 -->
    <entry key="ext_dict">custom/mydict.dic;custom/single_word_low_freq.dic</entry>
    <!-- 用戶可以在這里配置自己的擴展停止詞字典-->
    <entry key="ext_stopwords">custom/ext_stopword.dic</entry>
</properties>

3. 詞典文件格式

詞典文件是純文本文件,每行一個詞,UTF-8編碼。例如:

區塊鏈
人工智能
機器學習
云計算
大數據

4. 熱更新詞典

IK分詞器支持熱更新詞典,無需重啟Elasticsearch。配置方法:

  1. 修改IKAnalyzer.cfg.xml
<entry key="remote_ext_dict">http://your_server.com/getCustomDict</entry>
<entry key="remote_ext_stopwords">http://your_server.com/getStopwordDict</entry>
  1. 你的服務器需要返回詞典內容,響應頭包含Last-ModifiedETag字段

  2. IK分詞器會定期(默認60秒)檢查詞典更新

五、IK分詞器在搜索中的應用

1. 索引和搜索使用不同分詞器

通常建議:

  • 索引時使用ik_max_word,盡可能多地切分詞語,提高召回率
  • 搜索時使用ik_smart,提高準確率
PUT /my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "content": {
          "type": "text",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_smart"
        }
      }
    }
  }
}

2. 多字段(multi-field)策略

對于同一個字段,可以同時使用多種分詞方式:

PUT /my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "content": {
          "type": "text",
          "analyzer": "ik_max_word",
          "fields": {
            "smart": {
              "type": "text",
              "analyzer": "ik_smart"
            }
          }
        }
      }
    }
  }
}

這樣可以通過contentcontent.smart字段使用不同的分詞方式搜索。

3. 使用IK分詞器進行搜索

GET /my_index/_search
{
  "query": {
    "match": {
      "content": "中華人民共和國"
    }
  }
}

六、常見問題與解決方案

1. 分詞不準確

問題:某些專業術語或新詞沒有被正確切分

解決方案: - 將這些詞添加到自定義詞典中 - 定期更新詞典,特別是對于新出現的術語

2. 停用詞無效

問題:配置的停用詞仍然出現在搜索結果中

解決方案: - 檢查停用詞詞典文件路徑是否正確 - 確保文件編碼為UTF-8無BOM格式 - 檢查停用詞是否確實存在于詞典文件中

3. 熱更新不生效

問題:修改了遠程詞典但ES沒有加載最新內容

解決方案: - 檢查HTTP服務是否正常返回詞典內容 - 確保響應頭包含Last-ModifiedETag字段 - 檢查IK配置的URL是否正確

4. 性能問題

問題:使用IK分詞器后索引速度變慢

解決方案: - 考慮使用ik_smart代替ik_max_word進行索引 - 優化詞典大小,移除不必要的詞語 - 增加ES集群資源

七、最佳實踐

  1. 詞典管理

    • 將詞典文件納入版本控制
    • 建立詞典更新流程,特別是對于專業術語
  2. 測試策略

    • 在應用新詞典前,先用_analyzeAPI測試效果
    • 建立分詞測試用例,確保核心業務詞匯被正確處理
  3. 監控

    • 監控分詞器性能影響
    • 記錄未識別的詞匯,用于詞典優化
  4. 多語言支持

    • 對于混合內容,考慮使用多字段策略
    • 中文使用IK,英文使用standard或其他分詞器

結語

IK分詞器是Elasticsearch中文搜索的重要組件,合理配置和使用IK分詞器可以顯著提升中文搜索體驗。本文介紹了IK分詞器的安裝、配置、使用和優化方法,希望能幫助開發者更好地在Elasticsearch 5.x中實現中文搜索功能。

隨著業務發展,記得定期檢查和更新詞典,特別是對于新興術語和業務專有名詞。同時,結合業務場景選擇合適的分詞策略,平衡召回率和準確率,才能構建出高效的搜索系統。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女