詳解elasticsearch分詞器

一、簡介

隨著雲計算和大數據的普及,搜索引擎已經成為當今互聯網技術的重要組成部分。elasticsearch作為開源全文搜索引擎,其分詞器作為搜索引擎的核心組件,具有重要的作用。elasticsearch的分詞器主要有以下三個部分:

  1. 字元過濾器:對原始輸入和標記化的術語進行字元級處理,比如刪除HTML標籤、轉換字元編碼
  2. 分詞器:將輸入的文本拆分成單個單詞(詞項)的過程
  3. 標記過濾器:修改、刪除或添加特定標記,比如stemming、lowercasing、stopwords

二、分詞器的分類

elasticsearch分詞器按照不同的演算法可分為五種:

  1. Standard Analyzer(標準分詞器):按照非字母符號或空格分詞
  2. Simple Analyzer(簡單分詞器):按照非字母符號或空格分詞,並忽略大小寫
  3. Whitespace Analyzer(空格分詞器):按照空格分詞
  4. Keyword Analyzer(關鍵字分詞器):將輸入視作一個單一術語,常用於過濾或精確匹配查詢
  5. Language-specific Analyzers(特定語言分詞器):基於不同語言的特點進行分詞,如中文分詞、德語分詞、法語分詞等

三、中文分詞器的使用

中文分詞是一項複雜的任務,elasticsearch提供了多種中文分詞器,比如IK分詞器和smartcn分詞器。下面是使用IK分詞器進行中文分詞的代碼示例:

$ curl -X PUT "localhost:9200/test" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ik_max_word": { 
          "type": "custom",
          "tokenizer": "ik_max_word"
        },
        "ik_smart": {
          "type": "custom",
          "tokenizer": "ik_smart"
        }
      }
    }
  }
}
'

$ curl -X GET "localhost:9200/test/_analyze?pretty=true" -H 'Content-Type: application/json' -d'
{
  "analyzer": "ik_max_word",
  "text": "我是一名全能編程開發工程師"
}
'

// 返回結果:
{
  "tokens" : [
    {
      "token" : "我",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "是",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "一名",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "全能",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "編程",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
      "token" : "開發",
      "start_offset" : 8,
      "end_offset" : 10,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
      "token" : "工程師",
      "start_offset" : 10,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 6
    }
  ]
}

四、標記過濾器的使用

標記過濾器用於修改、刪除或添加特定標記,比如stemming、lowercasing、stopwords。下面是使用stopwords標記過濾器過濾「我是一個全能編程開發工程師」中停用詞的代碼示例:

PUT /stopwords_test
{
  "settings": {
    "analysis": {
      "filter": {
        "my_stopwords": {
          "type": "stop",
          "stopwords": ["我", "是", "一個"]
        }
      },
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "standard",
          "filter": ["lowercase", "my_stopwords"]
        }
      }
    }
  }
}

GET /stopwords_test/_analyze
{
  "analyzer": "my_analyzer",
  "text": "我是一個全能編程開發工程師"
}

// 返回結果:
{
  "tokens": [
    {
      "token": "全能",
      "start_offset": 5,
      "end_offset": 7,
      "type": "",
      "position": 3
    },
    {
      "token": "編程",
      "start_offset": 7,
      "end_offset": 9,
      "type": "",
      "position": 4
    },
    {
      "token": "開發",
      "start_offset": 9,
      "end_offset": 11,
      "type": "",
      "position": 5
    },
    {
      "token": "工程師",
      "start_offset": 11,
      "end_offset": 14,
      "type": "",
      "position": 6
    }
  ]
}

五、結尾

以上是elasticsearch分詞器的基本介紹和使用方法。不同的分詞器和標記過濾器的使用場景不同,可以根據不同情況進行選擇使用。希望這篇文章能夠幫助到使用elasticsearch的開發工程師。

原創文章,作者:KDQKF,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/371741.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
KDQKF的頭像KDQKF
上一篇 2025-04-23 18:08
下一篇 2025-04-23 18:08

相關推薦

  • Elasticsearch API使用用法介紹-get /_cat/allocation

    Elasticsearch是一個分散式的開源搜索和分析引擎,支持全文檢索和數據分析,並且可伸縮到上百個節點,處理PB級結構化或非結構化數據。get /_cat/allocation…

    編程 2025-04-28
  • Elasticsearch Scroll Java的使用指南

    本文旨在詳細介紹如何使用Elasticsearch Scroll Java。Elasticsearch Scroll Java是一種高效的遍歷大型數據集的方法。通過它,我們可以逐個…

    編程 2025-04-27
  • Python英文分詞:用法介紹與實現

    Python英文分詞是自然語言處理中非常重要的一步,它將英文文本按照語義分解成一個一個的單詞,為後續的文本分析和處理提供基礎。本文將從多個方面闡述Python英文分詞的實現方法及其…

    編程 2025-04-27
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25

發表回復

登錄後才能評論