Elasticsearch核心字段:keyword与text深度对比(区别+场景+选型+实战)

张开发
2026/4/19 5:21:52 15 分钟阅读

分享文章

Elasticsearch核心字段:keyword与text深度对比(区别+场景+选型+实战)
Elasticsearch核心字段keyword与text深度对比区别场景选型实战一、前言二、Elasticsearch text 和 keyword 字段基础定义2.1 text 字段定义2.2 keyword 字段定义三、text 和 keyword 处理流程核心流程图3.1 text 字段处理流程分词流程3.2 keyword 字段处理流程不分词流程3.3 流程核心区别四、text 和 keyword 核心区别超详细对比4.1 五大核心区别必掌握4.2 表格对比一目了然五、text 和 keyword 实战示例最直观理解5.1 示例数据5.2 text 字段处理结果5.3 keyword 字段处理结果六、Elasticsearch 多字段特性fields 最佳实践6.1 问题场景6.2 最优 Mapping 配置6.3 使用方式七、text 和 keyword 常见踩坑总结7.1 坑1用 text 做聚合报错/无结果7.2 坑2用 keyword 做全文搜索查不到数据7.3 坑3不设置 fields导致字段无法同时搜索和聚合八、字段类型选型指南生产直接用8.1 必须用 keyword 的场景8.2 必须用 text 的场景九、总结text vs keyword 核心口诀十、文末总结总结The Begin点点关注收藏不迷路一、前言在Elasticsearch映射Mapping设计中text和keyword是最常用、最容易混淆的两个字符串类型。90%的ES新手都会踩坑用错字段类型导致无法精确查询、无法聚合排序、分词混乱、查询缓慢等问题。本文将从定义、分词原理、处理流程、核心区别、使用场景、实战示例全方位讲解帮你彻底掌握text和keyword的选型写出最优Mapping。二、Elasticsearch text 和 keyword 字段基础定义2.1 text 字段定义text用于长文本内容会被分词器拆分成词语建立倒排索引适合全文检索。适用文章内容、描述、评论、标题等需要搜索的长文本。2.2 keyword 字段定义keyword用于短字符串不会分词原样存储和索引适合精确匹配、聚合、排序、过滤。适用状态值、枚举值、标签、手机号、邮箱、IP、ID、城市名称等。三、text 和 keyword 处理流程核心流程图3.1 text 字段处理流程分词流程原始文本我爱学习Elasticsearchtext字段触发分词器分词处理我/爱/学习/Elasticsearch建立词语倒排索引支持全文检索匹配单个词语3.2 keyword 字段处理流程不分词流程原始字符串北京keyword字段不分词原样存储原样索引支持精确匹配/聚合/排序3.3 流程核心区别text一定会分词拆分成词语不支持完整字符串操作keyword完全不分词字符串整体处理支持精确操作四、text 和 keyword 核心区别超详细对比4.1 五大核心区别必掌握是否分词text分词keyword不分词支持的查询方式text支持match全文检索keyword支持term精确匹配支持的操作text不支持聚合、排序、去重keyword支持聚合、排序、去重、过滤存储格式text存储分词后的词语keyword存储完整原始字符串适用长度text长文本keyword短字符串4.2 表格对比一目了然对比维度text 字段keyword 字段是否分词是会拆分词语否完整字符串主要用途全文搜索、模糊匹配精确查询、聚合、排序支持查询match、match_phraseterm、terms、prefix聚合/排序不支持或性能极差完美支持存储内容分词后的词语原始完整内容典型场景文章内容、描述、评论状态、ID、标签、城市、手机号默认高亮支持不常用五、text 和 keyword 实战示例最直观理解5.1 示例数据原始字符串我是中国程序员热爱Elasticsearch技术5.2 text 字段处理结果分词后我 / 是 / 中国 / 程序员 / 热爱 / Elasticsearch / 技术查询程序员→可以命中查询中国程序员→可以命中查询完整字符串 →可以命中5.3 keyword 字段处理结果存储结果我是中国程序员热爱Elasticsearch技术原样查询程序员→无法命中查询中国程序员→无法命中查询完整字符串 →可以命中六、Elasticsearch 多字段特性fields 最佳实践6.1 问题场景一个字段既需要全文搜索又需要聚合排序怎么办答案text keyword 共存6.2 最优 Mapping 配置PUT /my_index { mappings: { properties: { title: { // 文章标题 type: text, // 全文检索 fields: { keyword: { // 子字段keyword type: keyword, ignore_above: 256 // 超长字符串不索引 } } } } } }6.3 使用方式全文搜索使用title聚合/排序使用title.keyword七、text 和 keyword 常见踩坑总结7.1 坑1用 text 做聚合报错/无结果错误示例 aggs: { group_by_city: { terms: { field: city_text } // text字段无法聚合 } }7.2 坑2用 keyword 做全文搜索查不到数据错误示例 { term: { content_keyword: 程序员 } } // 无法匹配长文本7.3 坑3不设置 fields导致字段无法同时搜索和聚合解决方案统一使用text keyword结构八、字段类型选型指南生产直接用8.1 必须用 keyword 的场景状态值status(0/1/2)枚举值性别、类型、标签标识字段userId、orderId、手机号、邮箱地址信息国家、省份、城市需要分组、排序、去重的字段8.2 必须用 text 的场景文章正文、内容描述商品介绍、评论详情日志长文本需要全文搜索、模糊匹配的字段九、总结text vs keyword 核心口诀长文本、要搜索 → text短字符串、要精确/聚合/排序 → keyword既要搜索又要聚合 → text keyword 共存分词与否是本质区别十、文末总结text 和 keyword 是 Elasticsearch 最基础、最重要的字符串类型。text 分词 全文搜索keyword 不分词 精确匹配聚合排序合理选择字段类型是Mapping设计的第一步也是保证查询性能、功能正常的关键。总结本质区别text分词用于全文检索keyword不分词用于精确匹配核心能力text支持搜索keyword支持聚合、排序、去重最佳实践通用字段使用text fields.keyword双类型选型口诀长文本用text短字符串用keyword避坑指南text绝不用于聚合keyword绝不用于全文搜索The End点点关注收藏不迷路

更多文章