当前位置: 首页 > news >正文

Elasticsearch三大属性详解:enabled、index与store

好的,我们来分别解释 Elasticsearch 中 enabledindexstore 这三个属性的功能:

这三个属性都是在定义映射(Mapping)时,用于控制 Elasticsearch 如何处理某个字段或对象的。

  1. enabled

    • 功能: 控制 Elasticsearch 是否对该字段或对象的内容进行处理(解析、索引、存储)
    • 取值: true (默认) 或 false
    • 应用对象:
      • 字段 (Field): 如果对某个字段设置 enabled: false,那么:
        • 该字段的值不会被解析(例如,不会被分词)。
        • 该字段的值不会被索引,意味着你无法对该字段进行搜索或聚合
        • 该字段的值仍然会存储在 _source,因此当你获取整个文档时,可以看到这个字段的值。它的主要作用是保留原始数据而不让其参与搜索。
      • **对象(Object) 或 嵌套对象(Nested): **(更常见且主要用途) 如果对一个 Object 类型的字段设置 enabled: false,那么:
        • ES 不会解析该对象内部的结构。它不会识别或处理该对象内部的任何嵌套字段。
        • 该对象的整个内容被视为一个不透明的、单一的、未被索引的字段值(就像一个 "raw" 字符串)。
        • 该对象的整个 JSON 结构会原样存储在 _source
        • 无法搜索或聚合该对象内部的任何字段
    • 典型场景:
      • 存储不希望被搜索或分析的原始数据块(如第三方返回的整个 JSON payload)。
      • 存储二进制数据 (binary 类型字段默认 enabled: false)。
      • 临时禁用某个对象内部的复杂结构,避免映射冲突或节省处理开销。
  2. index

    • 功能: 控制字段的值是否应被索引
    • 取值: true (默认) 或 false
    • 应用对象: 单个字段。
    • 作用:
      • index: true (默认):该字段的值会被处理(根据类型和分析器)并添加到倒排索引中。这使得你可以对该字段进行搜索、过滤和聚合。这是绝大多数需要被查询字段的设置。
      • index: false:该字段的值不会被添加到倒排索引中
        • 你无法对该字段进行搜索(全文、精确值)、排序或聚合(基于字段值)。
        • 字段值仍然会存储在 _source,因此当你获取整个文档时,可以看到这个字段的值。
        • doc_values 属性(如果适用)可能不受影响,但通常 index: false 的字段如果不需要聚合或排序,也会设置 doc_values: false
    • 典型场景:
      • 存储仅用于展示、不需要搜索或聚合的字段(例如文章的 HTML 内容副本,你只需要在搜索结果中展示它,但搜索是基于另一个被索引的纯文本字段进行的)。
      • 存储敏感信息(如信用卡号),防止意外通过搜索暴露(但请注意,存储在 _source 中就存在暴露风险,安全措施需要更全面)。
      • 节省索引开销和存储空间(对于确定永远不会查询的大字段)。
  3. store

    • 功能: 控制字段的值是否在 _source 之外被额外单独存储一份
    • 取值: truefalse (默认)。
    • 应用对象: 单个字段。
    • 作用:
      • store: false (默认):字段的值存储在 _source 字段中。当你需要某个字段的值时,ES 必须先获取整个文档的 _source,然后从中解析出所需的字段。
      • store: true:字段的值不仅存储在 _source 中,还会在索引中单独存储一份
        • 这允许你使用 stored_fields 参数在查询时高效地只检索这个特定字段的值,而无需解析整个(可能很大的)_source
        • 注意:这个设置 不影响索引!它与字段是否能被搜索无关。 它只影响该字段值是否可以被独立高效地获取。
        • 即使 store: true,字段仍然需要被索引(index: true)才能被搜索。
    • 典型场景:
      • 文档非常大(_source 很大),但你只需要频繁访问其中几个小字段(如标题、摘要)。
      • 使用 copy_to 合并的字段,你想单独获取合并后的值而不解析整个 _source
      • 需要在搜索结果中高亮显示 (highlighting) 某个字段,且该字段使用了不同于映射定义的分析器(此时 ES 可能需要访问原始存储值)。
    • 重要区别: store 控制的是值的独立存储位置,而 enabled/index 控制的是是否处理/索引该值。_source 是存储整个原始文档 JSON 的地方。

总结对比表:

属性作用核心默认值影响搜索/聚合?值是否在 _source 中?值是否单独存储?主要应用对象
enabled是否处理(解析/索引)内容true (禁用则完全不可) (Object/字段都在)字段对象
index是否索引值(构建倒排索引)true (禁用则不可搜索)字段
store是否在 _source 外单独存储值false (当为 true)字段

简单关系举例:

  • 一个字段要想被搜索:enabled: true (如果应用于字段本身) 且 index: true 是必须的。store 的值不影响是否可搜索。
  • 一个字段设置了 enabled: false (或 index: false),它通常也会设置 store: false,因为没有索引意义再去单独存储它(但值仍在 _source 里)。
  • 一个字段设置了 index: falsestore: true 是可能的:你不能搜索它,但你能高效地单独获取它的原始值(例如,一个大文档里的一个标题字段,只用于展示不用于搜索)。
  • 一个对象设置了 enabled: false:它内部的任何字段设置(包括 indexstore)都无效,整个对象被当作一个不透明的值处理。

理解这三个属性的区别对于优化 Elasticsearch 的映射设计、存储效率和查询性能至关重要。

http://www.dtcms.com/a/352991.html

相关文章:

  • 【问题思考】为什么SVM中的w和超平面是垂直的?【SVM】【gemini生成】
  • Web转uni-app
  • 支持向量机(SVM)学习总结
  • 本地搭建 Redis/MySQL 并配置国内镜像加速(Docker/原生安装 | macOS/Linux/Windows)
  • Python爬虫实战:构建网易云音乐个性化音乐播放列表同步系统
  • 直线拟合方法全景解析:最小二乘、正交回归与 RANSAC
  • 3.【鸿蒙应用开发实战: 从入门到精通】开发入门 Hello World
  • Linux程序管理
  • SyntaxError: Failed to execute ‘open‘ on ‘XMLHttpRequest‘: Invalid URL
  • Mybatis总结
  • 织梦会员中心模板调用某个栏目名和栏目下文档的办法
  • 神经网络学习笔记11——高效卷积神经网络架构SqueezeNet
  • SCANeR Studio 仿真数据获取和车辆座舱数据输入-手自动驾驶切换(二)
  • 混合RAG架构:下一代企业级检索增强生成的融合之道
  • AI-Agent 深度科普:从概念到架构、应用与未来趋势
  • 【软考架构】软件架构复用的过程
  • 2025年- H100-Lc208--912.排序数组(快速选择排序)--Java版
  • k8s-容器化部署论坛和商城服务
  • 筑牢上线前安全防线:安全运维服务中的检测实践与深化
  • 【电路笔记 通信】子载波的频域Sinc函数证明 OFDM 正交子载波证明 绘图示例
  • Spring Cloud 高频面试题详解(含代码示例与深度解析)
  • AutoGen 智能体框架教程
  • THM Smol
  • leecode-三数之和
  • 广告牌安全监测系统综合解决方案
  • Python 前后端框架实战:从选型到搭建简易全栈应用
  • 6 种无需 iTunes 将照片从 iPhone 传输到电脑
  • Spark学习记录
  • 数据结构第8章 排序(竟成)
  • OpenFOAM中梯度场的复用(caching)和生命期管理