ES常識5:主分詞器、子字段分詞器

文章目錄

      • 一、主分詞器:最基礎的文本處理單元
        • 主分詞器的作用
        • 典型主分詞器示例
      • 二、其他類型的分詞器:解決主分詞器的局限性
        • 1. 子字段分詞器(Multi-fields)
        • 2. 搜索分詞器(Search Analyzer)
        • 3. 自定義分詞器(Custom Analyzer)
        • 4. 專能分詞器(Specialized Tokenizers)
      • 三、為什么需要多種分詞器?
      • 總結

在 Elasticsearch(ES)中, 分詞器(Analyzer) 是將文本拆分為可檢索詞元(Token)的核心組件。其中“主分詞器”是最基礎的類型,但為了滿足多樣化的文本處理需求,ES 還支持多種其他類型的分詞器。以下從定義、分類、典型場景三個維度詳細說明:

一、主分詞器:最基礎的文本處理單元

主分詞器是 ES 中默認用于索引和搜索階段的分詞器,負責將原始文本(如中文句子、英文段落)拆分為最小可檢索的詞元(Token)。它是每個 text 類型字段的“核心處理器”,決定了文本的基礎拆分邏輯。

主分詞器的作用
  • 索引階段:將文檔內容(如“北京天安門”)拆分為詞元(如北京天安門),寫入倒排索引。
  • 搜索階段:將用戶輸入的查詢詞(如“天安門”)拆分為詞元(如天安門),與索引中的詞元匹配。
典型主分詞器示例
  • 中文場景ik_max_word(細粒度拆分,如“人工智能”→人工智能人工智能)。
  • 英文場景standard(標準分詞器,按空格和標點拆分,轉小寫)。
  • 日文場景kuromoji(基于日語詞法分析的分詞器)。

二、其他類型的分詞器:解決主分詞器的局限性

主分詞器雖能處理基礎需求,但面對復雜場景(如多語言混合、拼音檢索、模糊匹配)時,需要其他類型的分詞器補充。ES 支持以下幾類“非主分詞器”:

1. 子字段分詞器(Multi-fields)

通過 fields 屬性為同一個字段創建多個子字段,每個子字段使用不同的分詞器,滿足不同查詢需求。
核心價值:一個字段支持多種拆分方式(如漢字、拼音、全拼)。

示例(中文+拼音混合索引):

{"mappings": {"properties": {"title": {"type": "text","analyzer": "ik_max_word",  // 主分詞器(處理漢字)"fields": {"pinyin": {                // 子字段(處理拼音)"type": "text","analyzer": "pinyin_analyzer"},"keyword": {               // 子字段(保留原文,用于精確匹配)"type": "keyword"}}}}}
}
  • 主字段 title:用 ik_max_word 拆分漢字(如“中國”→中國)。
  • 子字段 title.pinyin:用拼音分詞器拆分(如“中國”→zhongguozg)。
  • 子字段 title.keyword:用 keyword 分詞器(不拆分,保留原文“中國”)。
2. 搜索分詞器(Search Analyzer)

通過 search_analyzer 顯式指定搜索階段使用的分詞器(與索引階段的主分詞器不同)。
核心價值:解決“索引時細粒度拆分,搜索時粗粒度匹配”的矛盾。

典型場景
索引時用 ik_max_word(細粒度,如“北京大學”→北京大學北京大學),搜索時用 ik_smart(粗粒度,如用戶輸入“北大”→北大)。此時需用 search_analyzer 確保搜索詞拆分與索引詞元匹配。

配置示例

{"mappings": {"properties": {"content": {"type": "text","analyzer": "ik_max_word",       // 索引分詞器(細粒度)"search_analyzer": "ik_smart"    // 搜索分詞器(粗粒度)}}}
}
3. 自定義分詞器(Custom Analyzer)

通過組合 字符過濾器(Char Filter)分詞器(Tokenizer)詞元過濾器(Token Filter) 自定義分詞邏輯,滿足特定業務需求。
核心價值:靈活處理特殊文本(如去除HTML標簽、保留數字范圍)。

組成結構

analyzer: {char_filter: [ ... ],  # 預處理文本(如替換特殊符號)tokenizer: ...,         # 拆分文本為詞元(核心)filter: [ ... ]         # 過濾/修改詞元(如轉小寫、去停用詞)
}

示例(處理英文+數字混合文本):

{"settings": {"analysis": {"analyzer": {"custom_analyzer": {"char_filter": ["html_strip"],  # 去除HTML標簽"tokenizer": "standard",        # 按空格/標點拆分"filter": ["lowercase",                  # 轉小寫"asciifolding",               # 轉換特殊字符(如é→e)"stop"                        # 去除停用詞(如the、and)]}}}}
}
4. 專能分詞器(Specialized Tokenizers)

ES 內置了多種針對特定場景的分詞器,無需自定義即可直接使用:

  • keyword 分詞器:不拆分文本,將整個字符串作為一個詞元(用于精確匹配,如品牌名、ID)。
  • pattern 分詞器:按正則表達式拆分(如按-拆分“2023-05-11”→20230511)。
  • ngram 分詞器:生成連續字符組合(如“蘋果”→蘋果),用于模糊搜索(如輸入“蘋”召回“蘋果”)。
  • path_hierarchy 分詞器:按層級拆分路徑(如“/a/b/c”→/a/a/b/a/b/c),用于目錄結構檢索。

三、為什么需要多種分詞器?

主分詞器是基礎,但單一分詞器無法滿足所有需求:

  • 多維度檢索:用戶可能用漢字、拼音、首字母搜索同一內容(需子字段分詞器)。
  • 精度與性能平衡:索引時細粒度拆分(提升召回),搜索時粗粒度拆分(提升性能,需搜索分詞器)。
  • 特殊文本處理:如去除HTML標簽、保留數字范圍(需自定義分詞器)。
  • 跨語言支持:中文用 ik,英文用 standard,日文用 kuromoji(需不同主分詞器)。

總結

主分詞器是 ES 中最基礎的分詞器,負責索引和搜索的默認文本處理。但為了應對復雜場景,ES 還支持子字段分詞器(多維度檢索)、搜索分詞器(精度與性能平衡)、自定義分詞器(特殊文本處理)和專能分詞器(特定場景)。理解這些類型的核心差異,能幫助你根據業務需求(如召回率、準確性、性能)選擇合適的分詞方案。

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

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

相關文章

【第三十五周】Janus-pro 技術報告閱讀筆記

Janus-Pro 摘要Abstract文章信息引言方法Janus 架構Janus 訓練Janus-Pro 的改進 實驗結果總結 摘要 本篇博客介紹了Janus-Pro,這是一個突破性的多模態理解與生成統一模型,其核心思想是通過解耦雙路徑視覺編碼架構解決傳統方法中語義理解與像素生成的任務…

MySQL 數據操縱與數據庫優化

MySQL數據庫的DML 一、創建(Create) 1. 基本語法 INSERT INTO 表名 [(列名1, 列名2, ...)] VALUES (值1, 值2, ...); 省略列名條件:當值的順序與表結構完全一致時,可省略列名(需包含所有字段值)批量插…

(9)被宏 QT_DEPRECATED_VERSION_X_6_0(“提示內容“) 修飾的函數,在 Qt6 中使用時,會被編譯器提示該函數已過時

(1)起因是看到 Qt 的官方源代碼里有這樣的寫法: #if QT_DEPRECATED_SINCE(6, 0) //里面的都是廢棄的成員函數QT_WARNING_PUSHQT_WARNING_DISABLE_DEPRECATEDQT_DEPRECATED_VERSION_X_6_0("Use the constructor taking a QMetaType inst…

【bibtex4word】在Word中高效轉換bib參考文獻,Texlive環境安裝bibtex4word插件

前言 現已退出科研界,本人水貨一個。希望幫到有緣人 本篇關于如何將latex環境中的參考文獻bib文件轉化為word,和一些踩坑記錄。 可以看下面的資料進行配置,后面的文字是這些資料的補充說明。 參考文章:https://blog.csdn.net/g…

Python 自動化腳本開發秘籍:從入門到實戰進階(6/10)

摘要:本文詳細介紹了 Python 自動化腳本開發的全流程,從基礎的環境搭建到復雜的實戰場景應用,再到進階的代碼優化與性能提升。涵蓋數據處理、文件操作、網絡交互、Web 測試等核心內容,結合實戰案例,助力讀者從入門到進…

理解反向Shell:隱藏在合法流量中的威脅

引言 在網絡安全領域,??反向Shell(Reverse Shell)?? 是一種隱蔽且危險的攻擊技術,常被滲透測試人員和攻擊者用于繞過防火墻限制,獲取對目標設備的遠程控制權限。與傳統的“正向Shell”(攻擊者主動連接…

無人機電池儲存與操作指南

一、正確儲存方式 1. 儲存電量 保持電池在 40%-60% 電量(單片電壓約3.8V-3.85V)存放,避免滿電或空電長期儲存。 滿電存放會加速電解液分解,導致鼓包;**空電**存放可能引發過放(電壓低于3.0V/片會永久…

怎樣選擇成長股 讀書筆記(一)

文章目錄 第一章 成長型投資的困惑一、市場不可預測性的本質困惑二、成長股的篩選悖論三、管理層評估的認知盲區四、長期持有與估值波動的博弈五、實踐中的認知升級路徑總結:破解困惑的行動框架 第二章 如何閱讀應計制利潤表一、應計制利潤表的本質與核心原則1. 權責…

深入淺出之STL源碼分析6_模版編譯問題

1.模版編譯原理 當我們在代碼中使用了一個模板,觸發了一個實例化過程時,編譯器就會用模板的實參(Arguments)去替換(Substitute)模板的形參(Parameters),生成對應的代碼。…

無人甘蔗小車履帶式底盤行走系統的研究

1.1 研究背景與意義 1.1.1 研究背景 甘蔗作為全球最重要的糖料作物之一,在農業經濟領域占據著舉足輕重的地位。我國是甘蔗的主要種植國家,尤其是廣西、廣東、云南等地,甘蔗種植面積廣泛,是當地農業經濟的重要支柱產業。甘蔗不僅…

LVGL(lv_slider滑動條)

文章目錄 一、lv_slider 是什么?二、創建一個滑塊設置滑塊的范圍和初始值 三、響應滑塊事件四、設置樣式示例:更改滑塊顏色和滑塊按鈕樣式 五、縱向滑塊(垂直方向)六、雙滑塊模式(范圍選擇)七、獲取滑塊的值…

每日算法-250511

每日算法 - 250511 記錄一下今天刷的幾道LeetCode題目,主要是關于貪心算法和數組處理。 1221. 分割平衡字符串 題目 思路 貪心 解題過程 我們可以遍歷一次字符串,維護一個計數器 balance。當遇到字符 L 時,balance 增加;當遇…

Keepalived + LVS + Nginx 實現高可用 + 負載均衡

目錄 Keepalived Keepalived 是什么(高可用) 安裝 Keepalived LVS LVS 是什么(負載均衡) 安裝 LVS Keepalived LVS Nginx 實現 高可用 負載均衡 Keepalived Keepalived 是什么(高可用) Keepaliv…

【雜談】-DeepSeek-GRM:讓AI更高效、更普及的先進技術

DeepSeek-GRM:讓AI更高效、更普及的先進技術 文章目錄 DeepSeek-GRM:讓AI更高效、更普及的先進技術1、DeepSeek-GRM:先進的AI框架解析2、DeepSeek-GRM:AI開發的變革之力3、DeepSeek-GRM:廣泛的應用前景4、企業自動化解…

【MySQL】頁結構詳解:頁的大小、分類、頭尾信息、數據行、查詢、記錄及數據頁的完整結構

📢博客主頁:https://blog.csdn.net/2301_779549673 📢博客倉庫:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正! &…

【FreeRTOS】基于G431+Cubemx自用筆記

系列文章目錄 留空 文章目錄 系列文章目錄前言一、從頭開始創建一個FreeRTOS工程1.1 在 "Timebase Source" 中,選擇其他TIM1.2 配置FreeRTOS的參數1. 3 添加任務 二、動態任務的創建/刪除2.1 函數介紹2.1.1 創建動態任務xTaskCreate()2.1.2 創建靜態任務…

LVGL(lv_bar進度條)

文章目錄 一、lv_bar 是什么?二、基本使用創建一個進度條設置進度值 三、條形方向與填充方向四、范圍模式(Range)五、事件處理(可選)六、自定義樣式(可選)七、綜合示例八、配合 lv_timer 或外部…

AI對話小技巧

角色設定:擅于使用 System 給 GPT 設定角色和任務,如“哲學大師"指令注入:在 System 中注入常駐任務指令,如“主題創作"問題拆解:將復雜問題拆解成的子問題,分步驟執行,如&#xff1a…

C++ 核心基礎:數字、數組、字符串、指針與引用詳解

C++ 核心基礎:數字、數組、字符串、指針與引用詳解 1. C++ 基礎語法1.1 標識符與保留字1.2 數據類型概述1.3 基本輸入輸出2.1 基本整數類型(int、short、long、long long)2.2 無符號整數類型(unsigned int、unsigned short、unsigned long、unsigned long long)2.3 整數類…

HarmonyOS運動開發:如何集成百度地圖SDK、運動跟隨與運動公里數記錄

前言 在開發運動類應用時,集成地圖功能以及實時記錄運動軌跡和公里數是核心需求之一。本文將詳細介紹如何在 HarmonyOS 應用中集成百度地圖 SDK,實現運動跟隨以及運動公里數的記錄。 一、集成百度地圖 SDK 1.引入依賴 首先,需要在項目的文…