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不必多次加载同样的信息。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Doc2Vec训练相似文章识别模型

一、需求描述 由于在平台上发布的文章是来源于不同渠道和作者的,发布的文章也存在一定程度上的抄袭或者太相似。为了避免对用户体验造成影响,避免不必要的文章费用支出,需要识别出哪些文章是相似的。数据源是若干文章(中文&#x…

微软ping程序源代码完整版(附详细的注释)

作者:侯志江 单位:天津大学软件学院 E-mail :tjuhzjemailyahoo.com.cn 日期:2005年1月1日 内容简介: 编写自己的一个ping程序,可以说是许多人迈出网络编程的第一步吧!!这个ping程序的源代码经过我的修改和调试,基本上可以取代windows中自带的ping程序. 各个模块…

ElasticSearch原理

3.1解析es的分布式架构 3.1.1分布式架构的透明隐藏特性 ElasticSearch是一个分布式系统, 隐藏了复杂的处理机制 分片机制:我们不用关心数据是按照什么机制分片的、最后放入到哪个分片中 分片的副本: 集群发现机制(cluster discovery):比如当前我们启动了一-个es进程…

实时重复文章识别——SimHash

一、背景介绍 在前边的文章中,我们采用的是用google的Doc2Vec模型来识别重复文章的,从线上运行的效果来看,它的准确率是比较高的。当然,这是建立在把所有的文章都当做训练数据来训练Doc2Vec模型的基础上的,它推断出一篇…

Duplicate entry...for key...

Duplicate entry...for key...的错误原因是主键的唯一值重复,在对数据库进行修改、插入操作时,一但主键的唯一值重复就会报此错误,有时在表中存在多个主键时,对表操作仍然报此错误,是因为对该表的索引造成的。例如一个…

深入理解simhash原理

一、LSH 介绍 LSH(Locality sensitive hashing)是局部敏感性hashing,它与传统的hash是不同的。传统hash的目的是希望得到O(1)的查找性能,将原始数据映射到相应的桶内。 LSH的基本思想是将空间中原始数据相邻的2个数据点通过映…

我的bolg,我的收获(MVC首次接触)

一:VO:定义变量和getter和getter方法。 二:DBC:DateBaseConnection 三:接口:记住接口首字母用I开头。并且查询时用FindXxx等等区别 四:Impl实现类: 五:代理模式,负责关闭…

IntelliJ IDEA tomcat配置

1,首先安装好 IntelliJ IDEA 开发工具 2,右上角这里有个 Edit Configurations 3,添加模板 选择本地安装的tomcat 和 选择jdk 4,添加tomcat 这里tomcat就安装好了

Think in Java之斐波那契数列

斐波纳契数列(Fibonacci Sequence),又称黄金分割数列。 指的是这样一个数列:1、1、2、3、5、8、13、21、……这个数列从第三项开始,每一项都等于前两项之和。 在数学上,斐波纳契数列以如下被以递归的方法定…

(论文阅读笔记1)Collaborative Metric Learning(一)(WWW2017)

一、摘要 度量学习算法产生的距离度量捕获数据之间的重要关系。这里,我们将度量学习和协同过滤联系起来,提出了协同度量学习(CML),它可以学习出一个共同的度量空间来编码用户偏好和user-user 和 item-item的相似度。 …

《论道HTML5》内容技术分享活动

HTML5小组的第12次活动,本期沙龙围绕5月出版的《论道HTML5》重点章节内容展开,由我和另外一位作者秀野堂主现场分享。欢迎大家参加,下面是活动的详细信息。活动介绍:时间:2012年04月21日 13:30-18:00地址:东…

基于SpringBoot实现一个可扩展的事件总线

基于SpringBoot实现一个可扩展的事件总线 前言 在日常开发中,我们经常会用到事件总线,SpringBoot通过事件多播器的形式为我们提供了一个事件总线,但是在开发中我们经常会用到其他的实现,比如Guava、Disruptor的。我们将基于Spri…

(论文阅读笔记1)Collaborative Metric Learning(二)(WWW2017)

三、协同度量学习 这一部分,我们讨论CML作为一种更自然的方法获得关联关系。CML的思路是这样的:我们在已知正例关系的user-item集合S上建立一个隐性反馈模型,并且学习user-item的距离作为他们的关系。学习到的距离使得S中的对更加紧密&#x…

处理sharepoint 列表中的 person or group类型字段

如果直接取列表项的值,person or group 类型字段会是 userid;#value 的样式,所以对此类型字段需转换成 spuser 处理 SPUser test GetSPUser(oItem, assocList.Fields.GetField("AssociateName"));if (user.Sid.Equals(test.Sid)){ ...}privat…

大数据技术之 Kafka (第 1 章 Kafka 概述)

第 1 章 Kafka 概述 1.1 定义 Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。 1.2 消息队列 1.2.1 传统消息队列的应用场景 MQ传统应用场景之异步处理 使用消息队列的好处 1&a…

那些你无比崇拜的厉害人,是如何建构知识体系的

那些你无比崇拜的厉害人,是如何建构知识体系的? 2018-04-04 六合同风 文 | Lachel 高效思维达人,知识管理专家,深度思考践行者,领英、36氪特约作家 来源 | L先生说(ID:lxianshengmiao&#x…

嵌入式成长轨迹25 【Linux应用编程强化】【Linux下的C编程 下】【实例:客户端/服务器端程序】...

给出一个客户/服务器程序开发的案例,实现从服务器状态的远程监视功能。同时,客户端采用图形界面来显示数据。这个案例涵盖了网络编程和GUI编程的相关知识,读者应该注意其中的结合点。具体内容包括: 服务器端程序设计 客户端程序设…

TODO L

要写的目录 最近一段时间,由于太忙(根本就是懒)停止了博客的更新,时间也快有一年了。停博的这段时间,在我身上是发生了太多太多事。关于技术博客,我将想写的主题暂列如下,后边慢慢补充。 1 si…

大数据技术之 Kafka (第 2 章 Kafka快速入门)

第 2 章 Kafka 快速入门 下载安装kafka集群 1.需要jdk 2.需要zookeeper,这个东西在最新版的Kafka中内置。 3.下载Kafka安装包 (下载官网地址:Apache Kafka) 一,下载Kafka安装包 二,Kafka安装包上传li…