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.mzph.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.引入依赖 首先,需要在项目的文…