首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

修改ES返回字段方式提升性能

背景 最近我们在公司内尝试用ES替换老旧的Solr, 在性能对比测试的环节, 发现ES竟然比Solr慢了非常多, 响应时间是Solr的两三倍, 然后开始各种排查, 最后发现ES的响应时间竟然随着request.size...的增加呈线性增加, 这说明大部分时间都耗在了获取返回字段上面....测试不同的获取字段方式 测试: 在返回4000条文档的UID,score属性的测试中, 配置不同的返回字段参数的响应时间如下: "_source":{ "include":["UID"] }, 120ms...通过阅读源码知道, 当设置了"_source":false的时候, ES确实没有读取_source, 但是会默认读取两个字段: _id和_routing, 这两个字段ES内置的, 正常情况下无法查看其字段类型...第一次试图召回_id字段的时候, ES会根据其倒排索引结构, 在堆内存中构建fielddata cache并缓存. fielddata cache就是把倒排索引结构反转为正排索引, 这样一来就相当于在内存中构建了

3K52

ES聚合场景下部分结果数据未返回问题分析

背景 在对ES某个筛选字段聚合查询,类似groupBy操作后,发现该字段新增的数据,聚合结果没有展示出来,但是用户在全文检索新增的筛选数据后,又可以查询出来, 针对该问题进行了相关排查。...经过查询发现有段描述: 就是只会返回top结果, 部分结果不响应返回 那如何让这部分结果返回呢? 带着问题, 发现使用桶聚合,默认会根据doc_count 降序排序,同时默认只返回10条聚合结果....所有的筛选项数据都统计返回来....为什么不一下子返回所有统计项的结果数据呢?...总结 本文主要针对实际工作的应用问题,来排查解决ES聚合数据部分数据未展示问题, 同时对ES的聚合检索原理进行讲解 .在数据量大、聚合精度要求高、响应速度快的业务场景ES并不擅长.

1.7K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ES系列六、ES字段类型及ES内置analyzer分析

    一、背景知识 在Es中,字段的类型很关键: 在索引的时候,如果字段第一次出现,会自动识别某个类型,这种规则之前已经讲过了。 那么如果一个字段已经存在了,并且设置为某个类型。...如果自动映射无法满足需求,就需要使用者自己来设置映射类型,因此,就需要使用者了解ES中的类型。 下面就步入正题吧!...,常用于汉字短语、邮箱等复杂的字符串; 如果设置为analyzed则将会通过默认的standard分析器进行分析 2、store定义了字段是否存储 在《ES IN ACTION》中有这样一段描述...意思是,在ES中原始的文本会存储在_source里面(除非你关闭了它)。默认情况下其他提取出来的字段都不是独立存储的,是从_source里面提取出来的。...当然你也可以独立的存储某个字段,只要设置store:true即可。 独立存储某个字段,在频繁使用某个特殊字段时很常用。

    2.5K21

    ​show index 中部分字段的含义

    另:SELECT * FROM information_schema.STATISTICS WHERE TABLE_NAME = "t1" 与 show index from t1 作用相似,且会返回更多的字段信息...如本例中,对"name"和"age"字段建了一个联合索引idx_name_age.在该索引中,name字段排在第一,age字段排在第二,所以age的Seq_in_index值为2 5....该字段 估计索引中不重复记录. 如果这个相对值很小,可能就要评估索引是否有意义. 即可以通过该字段,来评估索引是否合理 cardinality字段是索引中唯一值的数目的估计值。...如 性别字段、类型字段,其可取值范围很小,称为低选择性.这类字段一般不需要建索引. 可参考: MySQL中Cardinality值的介绍 8....Sub_part 如果列只是一部分被编入索引(即前缀索引),则该字段将不为NULL,而为被编入索引的字符数目. 如果整列被编入索引, 则为NULL.

    16020

    ES6部分源码重写 -3(ES6-ES5的方式来手写部分源码)

    ES6中的多出的功能 对象必须要new的方式才能出来 定义原型上的方法和静态方法 添加原型上的方法和静态方法 子类继承父类 到此还有一个小问题需要注意 主要完成一下几个功能 对象必须要new的方式才能出来...创建对象 这里创建对象的方法采用立即执行函数,封闭作用域,避免将私有变量暴露 因为使用了立即执行函数,执行后就销毁,所以需要将构造函数返回给Plane这个变量 var Plane = (...){ this.name = name || "一般飞机"; this.blood = 100; } return Plane; })() 定义原型上的方法和静态方法 实现ES6...function(){ return true; } } ]); return AttackPlane; })(Plane) 子类继承父类 此处子类继承父类调用的是ES6...) var plane = new Plane("梦想号"); var apPlane = new AttackPlane("歼击机-01"); 到此还有一个小问题需要注意 如果父类构造函数返回的是一个对象

    53350

    ES学习笔记(四)字段类型(mapping)

    在mapping中,我们可以定义如下内容: 类型为String的字段,将会被全文索引; 其他的字段类型包括:数字、日期和geo(地理坐标); 日期类型的格式; 动态添加字段的映射规则; 字段的可用类型如下...我们在更新字段时候,是不能修改字段的类型的。如果我们要修改字段的类型,最好是新建一个新的字段,指定正确的类型,然后再更新索引,以后我们只需要查询这个新增的字段就可以了。...查看索引中的字段映射 如果我们要查看已知索引的字段映射,可以向ES发送如下的请求: GET /my-index/_mapping 请求的方法是GET,请求的路径是我们索引的名称my-index,再加上一个..._mapping,得到的返回结果如下: { "my-index" : { "mappings" : { "properties" : { "age" : {...index" : false }, "name" : { "type" : "text" } } } } } 返回的结果中

    71830

    ES学习笔记(四)字段类型(mapping)

    在mapping中,我们可以定义如下内容: 类型为String的字段,将会被全文索引; 其他的字段类型包括:数字、日期和geo(地理坐标); 日期类型的格式; 动态添加字段的映射规则; 字段的可用类型如下...我们在更新字段时候,是不能修改字段的类型的。如果我们要修改字段的类型,最好是新建一个新的字段,指定正确的类型,然后再更新索引,以后我们只需要查询这个新增的字段就可以了。...查看索引中的字段映射 如果我们要查看已知索引的字段映射,可以向ES发送如下的请求: GET /my-index/_mapping 请求的方法是GET,请求的路径是我们索引的名称my-index,再加上一个..._mapping,得到的返回结果如下: { "my-index" : { "mappings" : { "properties" : { "age" : {...index" : false }, "name" : { "type" : "text" } } } } } 返回的结果中

    1.7K10

    @JsonView注解如何优雅的忽略字段返回

    Avengers 之前我在写接口的时候,经常返回一些前台不需要的一些字段,举个例子,像用户表,一般由用户名、密码、电话、注册时间等信息,但是我们一般在前台展示的时候是不需要将注册时间展示给用户的,有的朋友可能说了...,直接使用@JsonIgnore注解就可以忽略该字段,确实给属性字段加了该注解确实可以让它不返回给前台,但是还有这样一个需求,我们一般都有一个后台管理系统需要管理所有的用户,我们需要查看这个用户是什么时候注册的...JsonView(UserDetailView.class) private Date registeredTime; } 我们在上方分别定义了两个接口,使用@JsonView注解,我们将前台需要展示的字段指向...user.setRegisteredTime(new Date()); return R.data(user); } } 我们需要在Controller方法上面也加@JsonView注解,需要注明我们返回哪些字段...,它里面装的就是我们刚才配置的那些字段,最后我们来看一看结果。

    1.8K30
    领券