Elasticsearch查询性能优化
constant_score的用处
当我们不关心检索词频率TF(Term Frequency)对搜索结果排序的影响时,可以使用constant_score将查询语句query或者过滤语句filter包装起来。
检索词频率:检索词在该字段出现的频率。出现频率越高,相关性也越高。字段中出现过5次要比只出现过1次的相关性高。
合理使用filters优化查询
ElasticSearch支持多种不同类型的查询方式,这一点大家应该都已熟知。但是在选择哪个文档应该匹配成功,哪个文档应该呈现给用户这一需求上,查询并不是唯一的选择。ElasticSearch 查询DSL允许用户使用的绝大多数查询都会有各自的标识,这些查询也以嵌套到如下的查询类型中:
constant_score
filterd
custom_filters_score
那么问题来了,为什么要这么麻烦来使用filtering?在什么场景下可以只使用queries? 接下来就试着解决上面的问题。
过滤器(Filters)和缓存
首先,正如读者所想,filters来做缓存是一个很不错的选择,ElasticSearch也提供了这种特殊的缓存,filter cache来存储filters得到的结果集。此外,缓存filters不需要太多的内存(它只保留一种信息,即哪些文档与filter相匹配),同时它可以由其它的查询复用,极大地提升了查询的性能。设想你正运行如下的查询命令:
{"query" : {"bool" : {"must" : [{"term" : { "name" : "joe" }},{"term" : { "year" : 1981 }}]}}
}
该命令会查询到满足如下条件的文档:name域值为joe同时year域值为1981。这是一个很简单的查询,但是如果用于查询足球运动员的相关信息,它可以查询到所有符合指定人名及指定出生年份的运动员。
如果用上面命令的格式构建查询,查询对象会将所有的条件绑定到一起存储到缓存中;因此如果我们查询人名相同但是出生年份不同的运动员,ElasticSearch无法重用上面查询命令中的任何信息。因此,我们来试着优化一下查询。由于一千个人可能会有一千个人名,所以人名不太适合缓存起来;但是年份比较适合(一般year域中不会有太多不同的值,对吧?)。因此我们引入一个不同的查询命令,将一个简单的query与一个filter结合起来。
{"query" : {"filtered" : {"query" : {"term" : { "name" : "joe" }},"filter" : {"term" : { "year" : 1981 }}}}
}
我们使用了一个filtered类型的查询对象,查询对象将query元素和filter元素都包含进去了。第一次运行该查询命令后,ElasticSearch就会把filter缓存起来,如果再有查询用到了一样的filter,就会直接用到缓存。就这样,ElasticSearch不必多次加载同样的信息。
Elasticsearch查询性能优化相关推荐
- 【Elasticsearch】Elasticsearch的IndexSorting:一种查询性能优化利器
1.概述 转载:Elasticsearch的IndexSorting:一种查询性能优化利器 前言 前两周写过一篇<基于Lucene查询原理分析Elasticsearch的性能>,在最后留了 ...
- ElasticSearch 海量数据查询性能优化
ElasticSearch 海量数据查询性能优化 尽量让查询计算简单 最大化使用操作系统的文件缓存 增加内存 减少 ES 中的数据量 思路扩展 冷热分离 数据预加载 小结 ES 接收到查询请求后,会转 ...
- Elasticsearch 检索性能优化实战指南
1.当我们在说 Elasticsearch 检索性能优化的时候,实际在说什么?! 检索响应慢! 并发检索用户多时,响应时间不达标 卡死了! 怎么还没有出结果? 怎么这么慢? 为啥竞品产品的很快就返回结 ...
- MySQL模糊查询性能优化
一.背景 我们经常在数据库中使用 LIKE 操作符来完成对数据的模糊搜索,LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. 如果需要查找客户表中所有姓氏是"孙"的数据 ...
- 数据库查询性能优化之利器—索引(二)
数据库查询性能优化之利器-索引(二) 在前面一篇文章中谈到适当地建立索引能够大幅度地提升SQL语句查询速度,然而并不是在什么情况下都适合建立索引,下面来谈一下什么情况下适合建立索引.建立什么样的索引以 ...
- SQL Server 查询性能优化——覆盖索引(二)
在SQL Server 查询性能优化--覆盖索引(一) 中讲了覆盖索引的一些理论. 本文将具体讲一下使用不同索引对查询性能的影响. 下面通过实例,来查看不同的索引结构,如聚集索引.非聚集索引.组合索 ...
- 查询性能优化(使用 Explain 进行分析、优化数据访问、重构查询方式)、存储引擎(InnoDB/MyISAM)
1.查询性能优化 1.1 使用 Explain 进行分析 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 比较重要的字段有: select ...
- 读薄《高性能MySql》(四)查询性能优化
读薄<高性能MySql>(一)MySql基本知识 读薄<高性能MySql>(二)Scheme与数据优化 读薄<高性能MySql>(三)索引优化 读薄<高性能M ...
- mysql笔记03 查询性能优化
查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...
最新文章
- 绝对实用 NAT + VLAN +ACL管理企业网络
- redux-form的学习笔记二--实现表单的同步验证
- 交换系统接媒体服务器,基于软交换的媒体服务器的设计与实现
- java中process方法用处_Java中ProcessBuilder应用实例
- vs2010操作excel 需要安装office2010
- Pickit 3 Programmer使用说明及 烧写程序步骤
- (二)探究本质,WebGIS前端地图显示之地图比例尺换算原理
- 深夜12点,头秃的那家伙,还在用 CSS 处理图片上的文字
- 7.19作业 防火墙知识,调研总结,包括但不限于与原理,设备使用,厂商介绍,形成报告
- MAC 扩展屏,颜色描述文件
- 号外!号外!豪车出租啦!
- 涪陵创新计算机学校2015元旦晚会,喜报:重庆市涪陵信息技术学校2019高考再续辉煌...
- 百度地图API乡镇级别行政区划
- 漫画:算法如何验证合法数独 | 全世界最难的数独?
- Linux直接上传文件rz命令和导出文件sz命令
- 使用MindStudio进行城市道路交通预测
- iOS App Singer 重签名工具的使用简介
- 记住下次看小电影前,一定要检查域名是不是 HTTPS 的!
- 11个超高清图片素材网站,可直接访问
- PC客户端离线安装包和下载器安装包的优劣点
热门文章
- 火狐浏览器title过长显示不全_浏览器渲染
- python界面设计实例qt_pyqt的最小示例qtreeview和qt设计
- 【OpenCV 例程200篇】46. 直方图均衡化
- 怎样发量暴增_发量少怎么增加发量 秃发女孩必学发量激増6招
- mysql 中varchar_MYSQL中VARCHAR和CHAR类型
- linux进入mongodb数据库命令,MongoDB 常用数据库命令,命令是如何工作的这里
- Python Pytest中fixture之yield唤醒teardown和终结函数addfinalizer
- js实战代码系列—周杰伦给你报时间+网页页签制作模板+jQuery初体验
- 微信中音乐播放在ios不能自动播放解决
- 【原创】大叔经验分享(6)Oozie如何查看提交到Yarn上的任务日志