为了优化索引性能,需要统计索引的字段数量。
Elasticsearch默认索引字段不能超过1000,由index.mapping.total_fields.limit参数进行设置。字段和对象映射,以及字段别名都计入这个限制。该值越大会导致内存不足和性能下降,特别在高负载的集群环境。

实际应用mapping定义通常采用动态模板进行定义,那么如何统计索引中字段数量,以及如何解决字段数超过限制问题。

统计索引中字段数量

ES没有提供_stat统计字段API,下面介绍字段能力API,可以返回多个索引的字段信息:

GET /_field_caps?fields=<fields>POST /_field_caps?fields=<fields>GET /<target>/_field_caps?fields=<fields>POST /<target>/_field_caps?fields=<fields>

下面示例查看字段ratingtitle信息:

GET _field_caps?fields=rating,title

响应:

{"indices": [ "index1", "index2", "index3", "index4", "index5" ],"fields": {"rating": {                                   "long": {"searchable": true,"aggregatable": false,"indices": [ "index1", "index2" ],"non_aggregatable_indices": [ "index1" ]  },"keyword": {"searchable": false,"aggregatable": true,"indices": [ "index3", "index4" ],"non_searchable_indices": [ "index4" ]    }},"title": {                                    "text": {"searchable": true,"aggregatable": false}}}
}

共5个索引,返回每个字段所属那些索引及其类型。如title在所有索引中都存在。

查询某个索引的字段信息,同时包括未映射的字段:

GET /index_name/_field_caps?fields=*&include_unmapped

超过字段数量限制

自然的想法是能不能调大index.mapping.total_fields.limit参数,如果要调大,最好同时调整indices.query.bool.max_clause_count参数,即查找中布尔查询子句的最大数量。

  • 使用flattened数据类型

对于对象中的子字段默认被单独映射、索引。扁平字段类型是解决字段过多问题的另一种方法,它把整个对象映射未单个字段。给定对象,flattened 类型解析出每个子字段值作为keyword类型,对象中的内容可以通过单个查询进行搜索或聚集。对于唯一字段类型未知的情况非常有用,对于真个json对象仅创建一个映射字段,可以有效防止映射有太多的字段————映射爆炸。

另外扁平对象字段在搜索功能方面提供了一种折衷方案。只允许基本查询,不支持数字范围查询或高亮显示。

示例:

PUT bug_reports
{"mappings": {"properties": {"title": {"type": "text"},"labels": {"type": "flattened"}}}
}POST bug_reports/_doc/1
{"title": "Results are not sorted correctly.","labels": {"priority": "urgent","release": ["v1.2.5", "v1.3.0"],"timestamp": {"created": 1541458026,"closed": 1541457010}}
}POST bug_reports/_doc/2
{"title": "Results are not descripted correctly.","labels": {"priority": "urgent","release": ["v1.3.5", "v1.4.0"],"creator": "tester","timestamp": {"created": 1541458026,"closed": 1541457010}}
}

这里定义了flattened类型labels字段,实际插入数据未对象,可以包括多个属性。

Elasticsearch中flattened字段类型相关推荐

  1. 在Elasticsearch中对 text 类型的字段进行聚合异常Fielddata is disabled,Set fielddata=true

    在Elasticsearch中对 text 类型的字段进行聚合异常Fielddata is disabled,Set fielddata=true 参考文章: (1)在Elasticsearch中对 ...

  2. php 查询datetime,急急PHP,数据库中createtime字段类型为datetime,怎样根据这个查询一段时间内的数据...

    数据库中createtime字段类型为datetime,是年月日时分秒,怎样把他转换成时间戳?数据很多,一条好转换,可是那么多怎么办? 回复讨论(解决方案) select unix_timestamp ...

  3. mysql中的字段类型

    Mysql中的字段类型 MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类 ...

  4. mysql join 索引 无效_ORACLE MYSQL中join 字段类型不同索引失效的情况-阿里云开发者社区...

    ORACLE MYSQL中join 字段类型不同索引失效的情况 重庆八怪 2016-12-29 780浏览量 简介: 关于JOIN使用不同类型的字段类型,数据库可能进行隐士转换,MYSQL ORACL ...

  5. mysql中数据库字段类型详解

    mysql中数据库字段类型详解 1,blob字段 mysql中blob是一个二进制大型对象,是一个可以储存大量数据的容器,它能容纳不同大小的数据. mysql中blob的四种类型除了存储数据的大小有区 ...

  6. mysql数据库中常用的类型_MySQL数据库中常用字段类型

    MySQL数据库中常用字段类型 整数型:TINYINT,SMALLINT,INT,BIGINT 小数型:FLOAT,DOUBLE,DECIMAL(M,D) 字符型:CHAR,VARCHAR 日期型:D ...

  7. Elasticsearch:Search-as-you-type 字段类型

    search_as_you_type 字段类型是一个类似 text 的字段,经过优化,可以为提供按需输入完成情况的查询提供开箱即用的支持. 它创建了一系列子字段,这些子字段被分析以索引可被部分与整个索 ...

  8. ElasticSearch中含有Object类型和数组对象的查询

    场景: 在ES库中含有对象Object类型的数据,查找了好久也没有找到相关的查询方法,特此记录一下 需求: 根据tags中的参数gisq_request_id参数的值获取相关的文档数据. 创建索引: ...

  9. plsql怎么用字段查表明_如何将oracle表中的字段类型、字段注释说明、字段名一起查询出来...

    展开全部 SELECT b.column_name column_name -字段名 ,b.data_type data_type -字段类型 ,b.data_length -字段长度 ,a.comm ...

最新文章

  1. java 面试题之银行业务系统
  2. R数据可视化--ggplot2定位之坐标系详解
  3. SQLAlchemy之SQL Expression
  4. c语言程序设计1.9例题
  5. java 32位授权码_Java实现OAuth2.0授权码方式
  6. 【机器视觉】 deserialize_measure算子
  7. SAP CRM WebClient UI cross component跳转的一个具体例子
  8. 这位勇士,你别去读博了:搞机器学习要PhD何用?
  9. jq 检测元素内html变化,jq 监听 textarea 元素内容变化的方法
  10. C++ 领域:游戏、HPC、编译器、金融、财务
  11. [转] Windows完成端口与Linux epoll技术简介
  12. 张亚勤新力作《变革中的思索》受热捧
  13. 京瓷m1025维修模式进不去_多个品牌复印机进入维修模式步骤大全
  14. 【21天python打卡】第15天 python经典案例(1)
  15. 零基础怎么学习单片机?
  16. MATLAB中fspecial函数的用法
  17. linux 搜狗输入法使用技巧,在Deepin 20系统中使用官方搜狗输入法的技巧
  18. [经典之作]vml经典之作
  19. 车机软件测试ADBShell命令集合
  20. vue 打印出现多余空白页的情况

热门文章

  1. 正确编写概要设计说明书
  2. 【工具】svn移动仓库数据并且账号不丢失的解决办法
  3. 练习题-JavaScript
  4. 蚂蚁金服消费金融风险管理技术团队期待你的加入
  5. IIS的服务器搭建配置(详细)
  6. 海思3559A QT 5.12移植(带webengine 和 opengl es)
  7. J A Game about Increasing Sequences(博弈
  8. win10本次操作由于计算机的限制而取消,技术员设置Win10系统提示“本次操作由于这台计算机的限制而被取消”的修复教程...
  9. 计算机被限制无法打开C盘,Win7设置C盘提示“本次操作由于这台计算机限制而被取消”怎么办...
  10. AC算法运行自定义gym环境