`

elasticsearch 搜索类型

阅读更多
es在查询时,可以指定搜索类型为
QUERY_THEN_FETCH,QUERY_AND_FEATCH,DFS_QUERY_THEN_FEATCH和DFS_QUERY_AND_FEATCH。

那么这4种搜索类型有什么区别?

分布式搜索背景介绍:
ES天生就是为分布式而生,但分布式有分布式的缺点。比如要搜索某个单词,但是数据却分别在5个分片(Shard)上面,这5个分片可能在5台主机上面。因为全文搜索天生就要排序(按照匹配度进行排名),但数据却在5个分片上,如何得到最后正确的排序呢?ES是这样做的,大概分两步。
step1、ES客户端会将这个搜索词同时向5个分片发起搜索请求,这叫Scatter,
step2、这5个分片基于本Shard独立完成搜索,然后将符合条件的结果全部返回,这一步叫Gather。
客户端将返回的结果进行重新排序和排名,最后返回给用户。也就是说,ES的一次搜索,是一次scatter/gather过程(这个跟mapreduce也很类似).

然而这其中有两个问题。
第一、数量问题。比如,用户需要搜索"双黄连",要求返回最符合条件的前10条。但在5个分片中,可能都存储着双黄连相关的数据。所以ES会向这5个分片都发出查询请求,并且要求每个分片都返回符合条件的10条记录。当ES得到返回的结果后,进行整体排序,然后取最符合条件的前10条返给用户。这种情况,ES5个shard最多会收到10*5=50条记录,这样返回给用户的结果数量会多于用户请求的数量。
第二、排名问题。上面搜索,每个分片计算分值都是基于自己的分片数据进行计算的。计算分值使用的词频率和其他信息都是基于自己的分片进行的,而ES进行整体排名是基于每个分片计算后的分值进行排序的,这就可能会导致排名不准确的问题。如果我们想更精确的控制排序,应该先将计算排序和排名相关的信息(词频率等)从5个分片收集上来,进行统一计算,然后使用整体的词频率去每个分片进行查询。

这两个问题,估计ES也没有什么较好的解决方法,最终把选择的权利交给用户,方法就是在搜索的时候指定query type。
1、query and fetch

向索引的所有分片(shard)都发出查询请求,各分片返回的时候把元素文档(document)和计算后的排名信息一起返回。这种搜索方式是最快的。因为相比下面的几种搜索方式,这种查询方法只需要去shard查询一次。但是各个shard返回的结果的数量之和可能是用户要求的size的n倍。
2、query then fetch(默认的搜索方式)
如果你搜索时,没有指定搜索方式,就是使用的这种搜索方式。这种搜索方式,大概分两个步骤,第一步,先向所有的shard发出请求,各分片只返回排序和排名相关的信息(注意,不包括文档document),然后按照各分片返回的分数进行重新排序和排名,取前size个文档。然后进行第二步,去相关的shard取document。这种方式返回的document与用户要求的size是相等的。
3、DFS query and fetch
这种方式比第一种方式多了一个初始化散发(initial scatter)步骤,有这一步,据说可以更精确控制搜索打分和排
4、DFS query then fetch
比第2种方式多了一个初始化散发(initial scatter)步骤。

DSF是什么缩写?初始化散发是一个什么样的过程?
从es的官方网站我们可以指定,初始化散发其实就是在进行真正的查询之前,先把各个分片的词频率和文档频率收集一下,然后进行词搜索的时候,各分片依据全局的词频率和文档频率进行搜索和排名。显然如果使用DFS_QUERY_THEN_FETCH这种查询方式,效率是最低的,因为一个搜索,可能要请求3次分片。但,使用DFS方法,搜索精度应该是最高的。
分享到:
评论

相关推荐

    elasticsearch-7.17.6及对应版本IK分词

    Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论您拥有结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch 都能以支持快速搜索的方式高效地存储和索引它。您可以超越简单的数据检索和...

    ElasticSearch分布式搜索引擎 v8.2.2

    Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V....

    elasticsearch-image-1.0-SNAPSHOT.zip elasticsearch插件 以图搜图 LIRE

    使用方法:将插件解压到elasticsearch 的plugins目录下即可。 存储数据时 ColorLayout surfFeature = new ColorLayout(); surfFeature.extract(ImageIO.read(imgfilepath)); JSONObject o = new JSONObject(); o....

    elasticsearch windows 7.17.16 解压安装包

    Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论您拥有结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch 都能以支持快速搜索的方式高效地存储和索引它。您可以超越简单的数据检索和...

    01-微盟 Elasticsearch 运维实践

    1、Elasticsearch 使用建议:介绍在使用 Elasticsearch 进行数据搜索和分析时,应该遵循的一些规范和建议,包括 ES 架构的选择、索引结构的设计、查询语句的优化、写入优化等等,以提高 Elasticsearch 的性能、可靠...

    Elasticsearch分布式搜索模型的实际应用小案例

    Elasticsearch是一个开源的分布式搜索和分析引擎,构建在Apache Lucene之上。它提供了一套强大的API和工具,可以实现分布式全文搜索、结构化和非结构化数据分析、日志存储和实时数据可视化等功能。 以下是一些...

    Elasticsearch 7.9.1.zip

    从地图和指标到站点搜索和工作场所搜索,Elasticsearch可以用于各种用例,并可以使用所有数据类型。 特征 集群和高可用性 自动节点恢复和数据重新平衡 横向可扩展性 跨集群和跨数据中心复制 各种管理工具和全面的...

    Elasticsearch(ES)多条件(日期,时段,时分,mac。。)过滤实现案例(6.3版本)

    Elasticsearch(ES)多条件过滤实现案例(6.3版本), 搜索过滤,对日期进行时分秒区间判断,多条件整合优化

    Elasticsearch最新2023年面试题附答案解析,大汇总.txt

    ### 12、你能否列出与 Elasticsearch 有关的主要可用字段数据类型? ### 13、详细描述一下 Elasticsearch 索引文档的过程。 ### 14、elasticsearch 分布式架构原理 ### 15、logstash 如何与 Elasticsearch 结合使用...

    python处理elasticsearch实例

    索引文档:使用连接对象的index()方法,传入索引名称、文档类型和文档数据来将文档索引到Elasticsearch中。 搜索文档:使用连接对象的search()方法,传入搜索查询条件和选项来从Elasticsearch中搜索匹配的文档。 ...

    Elasticsearch、Logstash、Kibana核心套件安装包

    Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。 Logstash是一个用来...

    Elasticsearch 技术解析与实战.zip

    前言 第1章 Elasticsearch入门 1 1.1 Elasticsearch是什么 1 1.1.1 Elasticsearch的历史 2 1.1.2 相关产品 3 1.2 全文搜索 3 1.2.1 Lucene介绍 4 1.2.2 Lucene倒排索引 4 1.3 基础知识 6 1.3.1 Elasticsearch术语及...

    elasticsearch 8.11.3 windows安装包

    Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论您拥有结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch 都能以支持快速搜索的方式高效地存储和索引它。您可以超越简单的数据检索和...

    elasticsearch查询模版-模糊查询,多字段查询,相似度计算等

    Elasticsearch(简称ES)是一个基于Apache Lucene构建的开源、分布式、RESTful风格的搜索和数据分析引擎。它允许你以前所未有的速度和规模,即时地存储、搜索和分析大量数据。Elasticsearch通常用于全文搜索、结构化...

    elasticsearch windows 7.10.0 解压安装包

    Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论您拥有结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch 都能以支持快速搜索的方式高效地存储和索引它。您可以超越简单的数据检索和...

    elasticsearch 7.10.0 linux 解压安装包

    Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论您拥有结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch 都能以支持快速搜索的方式高效地存储和索引它。您可以超越简单的数据检索和...

    elasticsearch概述及应用.pdf

    Elasticsearch,简称ES,是一个基于Lucene构建的开源、分布式、RESTful搜索引擎。它提供了一个分布式多租户能力的全文搜索引擎,具有HTTP Web界面和无模式JSON文档。Elasticsearch是用Java开发的,并作为Apache许可...

    elasticsearch 7.17.16 linux 解压安装包

    Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论您拥有结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch 都能以支持快速搜索的方式高效地存储和索引它。您可以超越简单的数据检索和...

    install-elasticsearch-cluster.sh

    Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论您拥有结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch 都能以支持快速搜索的方式高效地存储和索引它。您可以超越简单的数据检索和...

    资源前后端分离式分布式微服务架构项目课程发布ElasticSearch讲义+源码+视频

    课程发布 应用 重点 能够完成课程发布开发 "理解课程发布的流程完成CMS一键...ElasticSearch安装了解ES的三个配置文件完成head插件安装并连接ES"ES快速入门 应用 重点 能够完成ES快速入门程序 "能够完成创建索引库能够...

Global site tag (gtag.js) - Google Analytics