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查询性能优化相关推荐

  1. 【Elasticsearch】Elasticsearch的IndexSorting:一种查询性能优化利器

    1.概述 转载:Elasticsearch的IndexSorting:一种查询性能优化利器 前言 前两周写过一篇<基于Lucene查询原理分析Elasticsearch的性能>,在最后留了 ...

  2. ElasticSearch 海量数据查询性能优化

    ElasticSearch 海量数据查询性能优化 尽量让查询计算简单 最大化使用操作系统的文件缓存 增加内存 减少 ES 中的数据量 思路扩展 冷热分离 数据预加载 小结 ES 接收到查询请求后,会转 ...

  3. Elasticsearch 检索性能优化实战指南

    1.当我们在说 Elasticsearch 检索性能优化的时候,实际在说什么?! 检索响应慢! 并发检索用户多时,响应时间不达标 卡死了! 怎么还没有出结果? 怎么这么慢? 为啥竞品产品的很快就返回结 ...

  4. MySQL模糊查询性能优化

    一.背景 我们经常在数据库中使用 LIKE 操作符来完成对数据的模糊搜索,LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. 如果需要查找客户表中所有姓氏是"孙"的数据 ...

  5. 数据库查询性能优化之利器—索引(二)

    数据库查询性能优化之利器-索引(二) 在前面一篇文章中谈到适当地建立索引能够大幅度地提升SQL语句查询速度,然而并不是在什么情况下都适合建立索引,下面来谈一下什么情况下适合建立索引.建立什么样的索引以 ...

  6. SQL Server 查询性能优化——覆盖索引(二)

    在SQL Server 查询性能优化--覆盖索引(一)  中讲了覆盖索引的一些理论. 本文将具体讲一下使用不同索引对查询性能的影响. 下面通过实例,来查看不同的索引结构,如聚集索引.非聚集索引.组合索 ...

  7. 查询性能优化(使用 Explain 进行分析、优化数据访问、重构查询方式)、存储引擎(InnoDB/MyISAM)

    1.查询性能优化 1.1 使用 Explain 进行分析 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 比较重要的字段有: select ...

  8. 读薄《高性能MySql》(四)查询性能优化

    读薄<高性能MySql>(一)MySql基本知识 读薄<高性能MySql>(二)Scheme与数据优化 读薄<高性能MySql>(三)索引优化 读薄<高性能M ...

  9. mysql笔记03 查询性能优化

    查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...

最新文章

  1. 绝对实用 NAT + VLAN +ACL管理企业网络
  2. redux-form的学习笔记二--实现表单的同步验证
  3. 交换系统接媒体服务器,基于软交换的媒体服务器的设计与实现
  4. java中process方法用处_Java中ProcessBuilder应用实例
  5. vs2010操作excel 需要安装office2010
  6. Pickit 3 Programmer使用说明及 烧写程序步骤
  7. (二)探究本质,WebGIS前端地图显示之地图比例尺换算原理
  8. 深夜12点,头秃的那家伙,还在用 CSS 处理图片上的文字
  9. 7.19作业 防火墙知识,调研总结,包括但不限于与原理,设备使用,厂商介绍,形成报告
  10. MAC 扩展屏,颜色描述文件
  11. 号外!号外!豪车出租啦!
  12. 涪陵创新计算机学校2015元旦晚会,喜报:重庆市涪陵信息技术学校2019高考再续辉煌...
  13. 百度地图API乡镇级别行政区划
  14. 漫画:算法如何验证合法数独 | 全世界最难的数独?
  15. Linux直接上传文件rz命令和导出文件sz命令
  16. 使用MindStudio进行城市道路交通预测
  17. iOS App Singer 重签名工具的使用简介
  18. 记住下次看小电影前,一定要检查域名是不是 HTTPS 的!
  19. 11个超高清图片素材网站,可直接访问
  20. PC客户端离线安装包和下载器安装包的优劣点

热门文章

  1. 火狐浏览器title过长显示不全_浏览器渲染
  2. python界面设计实例qt_pyqt的最小示例qtreeview和qt设计
  3. 【OpenCV 例程200篇】46. 直方图均衡化
  4. 怎样发量暴增_发量少怎么增加发量 秃发女孩必学发量激増6招
  5. mysql 中varchar_MYSQL中VARCHAR和CHAR类型
  6. linux进入mongodb数据库命令,MongoDB 常用数据库命令,命令是如何工作的这里
  7. Python Pytest中fixture之yield唤醒teardown和终结函数addfinalizer
  8. js实战代码系列—周杰伦给你报时间+网页页签制作模板+jQuery初体验
  9. 微信中音乐播放在ios不能自动播放解决
  10. 【原创】大叔经验分享(6)Oozie如何查看提交到Yarn上的任务日志