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方法,搜索精度应该是最高的。

至于DFS是什么缩写,没有找到相关资料,这个D可能是Distributed,F可能是frequency的缩写,至于S可能是Scatter的缩写,整个单词可能是分布式词频率和文档频率散发的缩写。

总结一下,从性能考虑QUERY_AND_FETCH是最快的,DFS_QUERY_THEN_FETCH是最慢的。从搜索的准确度来说,DFS要比非DFS的准确度更高。

Elasticsearch搜索类型讲解(QUERY_THEN_FETCH,QUERY_AND_FEATCH,DFS_QUERY_THEN_FEATCH和DFS_QUERY_AND_FEATCH)...相关推荐

  1. Elasticsearch搜索类型(SearchType)详解

    SearchType详解 es在查询时,可以指定搜索类型为 QUERY_THEN_FETCH,QUERY_AND_FEATCH,DFS_QUERY_THEN_FEATCH和DFS_QUERY_AND_ ...

  2. Elasticsearch搜索类型(query type)详解

    es在查询时,可以指定搜索类型为QUERY_THEN_FETCH,QUERY_AND_FEATCH,DFS_QUERY_THEN_FEATCH和DFS_QUERY_AND_FEATCH.那么这4种搜索 ...

  3. ElasticSearch搜索详细讲解与操作

    全文检索基础 全文检索流程 流程: #mermaid-svg-7Eg2qFEl06PIEAxZ {font-family:"trebuchet ms",verdana,arial, ...

  4. 【Elasticsearch】搜索类型 SearchType

    1.概述 es在查询时,可以指定搜索类型为 QUERY_THEN_FETCH QUERY_AND_FEATCH DFS_QUERY_THEN_FEATCH DFS_QUERY_AND_FEATCH 我 ...

  5. Elasticsearch搜索结果处理

    CSDN话题挑战赛第1期 活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题:Java学习记录 话题描述 ...

  6. elasticsearch搜索过程分析

    (一)通过HTTP请求调用搜索服务 示例: GET http://localhost:9200/index_test/_search {"query": {"query_ ...

  7. ELK Stack 日志分析 Elasticsearch搜索权限

    视频下载地址:链接:http://pan.baidu.com/s/1qYrgyPe 密码:s9sr 这几年国内运维都在不断完善运维自动化! 设想,IT运维自动化建设完成之后,那下一步怎么走? 我可以很 ...

  8. elasticsearch工具类_Django + Elasticsearch——搜索精彩的TED演讲

    在本文中,我们将介绍Elasticsearch的基础知识: 它是什么,如何运行它,如何与它进行通信. 然后,在我们熟悉了Elasticsearch之后,我们将开始使用Django开发一个简单的web应 ...

  9. 干货 | Elasticsearch 检索类型选型指南

    之前在 DSL 中一次问卷调查中,收集到如下几个和搜索类型相关的问题. Q1:麻烦讲一下es常用的查询关键词,及使用场景,比如term.match.should.filter等等,谢谢老大...... ...

最新文章

  1. linux中的一些命令的想法
  2. 二三代基因组混合组装流程的搭建与序列拼接并行优化方法研究_武海波
  3. Hadoop YARN学习之Hadoop框架演进历史简述
  4. UVA225Golygons 黄金图形
  5. phppage类封装分页功能_php显示页码分页类的封装
  6. 【渝粤题库】陕西师范大学400010 当代西方社会思潮评析 作业(专升本)
  7. python fieldnames_csvreader.fieldnames在python中未被识别为csv reader对象的属性
  8. 怎样使用Eclipse来开发Android源码
  9. 第六章 核心API (二)
  10. 您的618快递正在燃烧?12吨快递货车高速上起火,网友:代入感极强!
  11. 初学Phreeze 3
  12. 一次澄清:数据分析思维五大误区
  13. 简单通用的Makefile
  14. ERROR [com.alibaba.druid.pool.DruidDataSource] - abandon connection
  15. 膳食营养与健康类毕业论文文献都有哪些?
  16. 多人扑克游戏:99分游戏规则介绍
  17. Win10 打印时提示 “发现您尚未安装打印机”
  18. Github报错——Failed to connect to github.com port 443: Timed out
  19. 中药好苦,同义词词典
  20. 2019 校内赛 RPG的地牢猎手(bfs+优先队列)

热门文章

  1. 2019年工信部重点实验室名单公布 涵盖卫星导航及人工智能等多个领域
  2. 人工智能、核聚变、碳捕捉……最有可能帮助拯救地球的10项技术
  3. 城市大脑与智慧城市前沿趋势 主题论坛 |未来科技大讲堂 第12期
  4. 资金只够支撑10个月,自动驾驶致命事故重演:特斯拉陷入困境
  5. 《人工智能转型手册》,吴恩达 著
  6. 对抗性攻击轻松愚弄人工智能
  7. 人类“换头术”现在就是一场炒作 但医学界不会放弃研究
  8. LeCun论战Markus:AI是否需要类似人类的认知能力?
  9. 深度学习处在大爆炸时代的边缘
  10. 那个全网下班最早的程序员,我发现了他的秘密……