精华内容
下载资源
问答
  • es查询原理

    2021-07-21 20:31:54
    es查询原理: 步骤: 查询请求将被随机发送到一个es节点,该节点成为coordinating node,即协调节点 协调节点根据路由算法算出被查询doc所在的primary shard在哪个节点 协调节点使用轮询调度算法(Round-Robin ...

    es查询原理:

    步骤:

    1. 查询请求将被随机发送到一个es节点,该节点成为coordinating node,即协调节点
    2. 协调节点根据路由算法算出被查询doc所在的primary shard在哪个节点
    3. 协调节点使用轮询调度算法(Round-Robin Scheduling)将请求平均的分配到primary shard和replica shard上,目的是负载均衡
    4. 处理请求的节点将请求结果返回给协调节点
    5. 协调节点将结果返回给用户

    本文参考

    千锋教育 搜索引擎 ElasticSearch 视频教程全集(60P) 10 小时从入门到精通

    展开全文
  • elasticsearch查询原理

    2017-03-02 15:05:42
    1.本文阐述了elasticsearch查询原理和为什么不能使用深度分页 ...

    1.本文阐述了elasticsearch的查询原理和为什么不能使用深度分页

    http://lxwei.github.io/posts/%E4%BD%BF%E7%94%A8scroll%E5%AE%9E%E7%8E%B0Elasticsearch%E6%95%B0%E6%8D%AE%E9%81%8D%E5%8E%86%E5%92%8C%E6%B7%B1%E5%BA%A6%E5%88%86%E9%A1%B5.html

    展开全文
  • ElasticSearch查询原理一篇文章搞懂

    千次阅读 2019-06-22 18:11:37
    国际惯例,站在上帝的视角看看闻名的ElasticSearch长什么样,由于今天仅仅讲查询模块,所以对图中的大多数模块不会涉及。 查询相关的模块主要有:Api接口,Transport模块,Searcher模块、索引相关。 2ES查询分类...

    1ES架构简介  

        国际惯例,站在上帝的视角看看闻名的ElasticSearch长什么样,由于今天仅仅讲查询模块,所以对图中的大多数模块不会涉及。

        查询相关的模块主要有:Api接口,Transport模块,Searcher模块、索引相关。

    2ES查询分类   

    ElasticSearch支持的查询有三种

    1.     query_and_fetch  

    2.     query_then_fetch  

    3.     DFS_query_and_fetch 

    三种查询的名字都很简练,并且单词都很熟悉,那这三种查询各代表什么意思,又该如何选择呢?首先需要理解什么是query,和fetch,以及DFS。

    一般来说检索的查询都会分为两个阶段

        a: 获取命中的docid list (只需要id和score即可)。

        b: 根据符合条件的docid,取正排信息,返回客户端,展示。

    上面a叫做query过程,b叫fetch过程。

    那什么叫DFS?DFS,即Document Frequency Search。这里我只告诉你全称,如果你有兴趣的话,你一定会自查,如果没有兴趣,也不会影响这篇文章的理解。

     

        有了上面的知识,你已经初步走入搜索的大门了!

     

        那么上面的三种查询,我们可以用图表述如下:

       

    一般来说,也是国际惯例,默认搜索都是用两阶段,当然理解了两阶段,其余的都不是事儿。那么什么叫做query_then_fetch呢?当然就是先query,然后(then)fetch,下面听我细细道来: 

     

    query过程:

    1.   假设客户端发送一个search请求到服务器(Node)上(这个node我们称为这次请求的cordinate节点),然后Node 会创建一个优先级队列它的大小=from+size。 其中from和size是翻页信息。

    2.   接着Node 转发这个search请求到索引里面每一个主shard或者副本shard上,每个shard会在本地查询然后添加结果到本地的排序好的优先级队列里面。

    3.   每个shard返回docId和所有参与排序字段的值例如_score到优先级队列里面,然后再返回给cordinate节点,然后cordinate负责将所有shard里面的数据给合并到一个全局的排序的列表。 

        就此,query过程结束后,协调节点(cordinate)知道了哪些id是我们需要的!那么下一步获取摘要信息

     

     余下文章,请关注公众号,继续阅读

    展开全文
  • es查询dsl有很多种类型,比如match query,term query, filter, 关于elasticsearch query 各种dsl可以参考:elastic search query dsl查询语法总结 这篇文章不详细展开具体的区别,仅对完整的流程做一个分析 查询...

    es的查询dsl有很多种类型,比如match query,term query, filter, 关于elasticsearch query 各种dsl可以参考:elastic search query dsl查询语法总结
    这篇文章不详细展开具体的区别,仅对完整的流程做一个分析
    查询分为两个阶段:query阶段和fetch阶段

    query阶段

    在这里插入图片描述

    1、客户端发送请求到任意一个coordinate node(节点默认就为coordinate node)

    构建一个priority queue,长度以paging操作from和size为准,默认为10

    2、coordinate node对document进行路由,将请求转发到对应的node,此时会使用round-robin随机轮询算法,在primary shard以及其所有replica中随机选择一个,让读请求负载均衡

    3、每个shard本地搜索,并构建一个本地的priority queue

    接收到请求的每个shard,也会构建一个from + size大小的本地priority queue。

    这里面是如何进行_score计算的,其根据这个本地shard的tf-idf情况,进行相关度评分

    这是多shard下可能评分发生评分不准的原因

    如何调用底层lucene进行查询的

    这里有一个norms的概念,以及节省存储空间的一个细节

    lucene在内部会通过doc id来唯一标识一个document,这个doc id是integer类型,范围在0到索引中含有的document数量之间。这些doc id是用来在lucene内部的api之间进行通信的,比如说,对一个term用一个match query来进行搜索,就会产生一个doc id集合,然后这些doc id会用来获取对应的norm值,以用来计算每个doc的相关度分数。

    而根据doc id查找norm的过程,是通过每个document的每个field保留一个字节来进行的一个算法,这个过程叫做norm查找,norm就是每个document的每个field保留的一个字节。对于每个doc id对应的那个norm值,可以通过读取es一个内置索引(doc_id的索引)中的一个字节来获取。这个过程是性能很高的,而且可以帮助lucene快速的定位到每个document的norm值,但是同时这样的话document本身就不需要存储这一个字节的norm值了。

    参考:elasticsearch中mapping定义中norms字段的疑问?

    4、各个shard将自己的priority queue返回给coordinate node

    coordinate node将所有shard的from + size大小的priority queue,进行merge。merge成一个from + size大小的priority queue,全局排序后的queue,放到自己的queue中。

    此时,coordinate queue,就可以将自己priority queue中的数据,取出当前要获取的那一页的数据了。

    这就是es deep page效率低的原因

    Fetch阶段

    在这里插入图片描述

    1、coordinate node获取query phase结果后,获取到的是一堆doc id等信息。就会发送mget api去各个shard上批量一次性获取自己需要的数据

    2、各个shard将document返回给coordinate node

    3、coordinate node将合并后的document结果返回给client客户端

    4、特殊情况:document如果还在建立索引过程中,可能只有primary shard有,任何一个replica shard都没有,此时可能会导致无法读取到document,但是document完成索引建立之后,primary shard和replica shard就都有了

    search_type

    搜索相关参数有一个search_type参数

    default:query_then_fetch,就是请求分为两次,如上面介绍的。

    另外一种type:dfs_query_then_fetch,可以提升relevance sort精准度

    DFS 其实就是在进行真正的查询之前, 先把各个分片的词频率和文档频率收集一下, 然后进行词搜索的时候, 各分片依据全局的词频率和文档频率进行搜索和排名。 显然如果使用 DFS_QUERY_THEN_FETCH 这种查询方式, 效率比较低,因为一个搜索, 可能要请求 3 次。 但使用 DFS 方法, 搜索精度比较高。

    搜索的慢查询日志

    可以针对query phase和fetch phase单独设置慢查询的阈值

    展开全文
  • ES查询原理和timeout讲解

    千次阅读 2018-11-05 00:48:27
    ES查询过程 1、客户端发送请求到任意一个node,成为coordinate node 2、coordinate node对document进行路由,将请求转发到对应的node(primary或者replicanode上)上,此时使用round-robin随机轮询算法,在primary ...
  • ES路由、写入、近实时刷盘与查询原理
  • client选择任一node发送get document请求 node获得请求后变为coordinating node(协调节点),对document进行路由,得到primary shard的位置 coordinating node(协调节点)采取round-robin随机轮询算法,尽量让...
  • ElasticSearch scroll查询原理

    千次阅读 2020-09-27 11:11:24
    一、 ES搜索两阶段简介 ES的搜索是分2个阶段进行的,即Query阶段和Fetch阶段。 Query阶段比较轻量级,通过查询倒排索引,获取满足查询结果的文档ID列表。 Fetch阶段比较重,需要将每个shard的结果取回,在协调...
  • ES的搜索是分2个阶段进行的,即Query阶段和Fetch阶段。 Query阶段比较轻量级,通过查询倒排索引,获取满足查询结果的文档ID列表。 而Fetch阶段比较重,需要将每个shard的结果取回,在协调结点进行全局排序。 通过...
  • ELasticSearch-ES集群原理与搭建

    万次阅读 2020-08-11 10:55:56
    ES集群原理  查看集群健康状况:URL+ /GET _cat/health  (1)、首先弄清ES基本概念名词  Cluster  代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是...
  • ElasticSearch6.5.4<一>单机部署以及简单尝试 ElasticSearch6.5.4<二>几个重要概念以及常用搜索 ElasticSearch6.5.4<三>中文以及拼音的操作 ElasticSearch6.5.4<四>java使用ES并实战搜索...
  • 倒排索引 创建倒排索引的过程如下: 对原始数据文档进行编号(doc_id), 形成一个文档列表。假设现有数据如下: 文档编号(doc_id) ...对文档数据按照一定算法进行分词, 得到很多的词条,并且以这些词条为索引,...
  • 1 初识ElasticSearch 先来认识一下ES的作用 应用案例: 1、课程管理服务将数据写到MySQL数据库 2、使用Logstash将MySQL数据库中的数据写到ES的索引库。 3、用户在前端搜索课程信息,请求到搜索服务。 4、搜索服务...
  • 本文章以PPT的形式,详细展示了elastic search的工作原理、存储、及注意事项,如shard分片原理及设计、相关插件、与solr比较
  • 当用Chrome浏览器插件elastic header连接es服务器的时候,调用的api是 GET /_nodes es服务器内部使用的handler是Netty4HttpRequestHandler 看一下核心的堆栈信息图 对于该API,es内置对应的操作是 ...
  • 来源:8rr.co/GsAa面试题ES 写入数据的工作原理是什么啊?ES 查询数据的工作原理是什么啊?底层的 Lucene 介绍一下呗?倒排索引了解吗?面试官心理分析问这个,其实面试官就...
  • Elasticsearch架构原理

    万次阅读 2018-02-08 11:36:53
    本书作为 Elastic Stack 指南,关注于 Elasticsearch 在日志和数据分析场景的应用,并不打算对底层的 Lucene 原理或者 Java 编程做详细的介绍,但是 Elasticsearch 层面上的一些架构设计,对我们做性能调优,故障...
  • ES现在已经越来越火,很多公司会把mysql里面的数据导入到ES,用ES来做海量数据的实时查询。那为什么mysql做不了海量数据的实时查询呢?为什么ES能做? 这个问题很有意思,我自己也很感兴趣,因此进行了一些分析和...
  • ElasticSearch架构原理

    2019-05-15 16:30:35
    ElasticSearch 本文主要介绍了ElasticSearch的架构原理,存储模型,近实时搜索原理和常用插件es-head和es-sql的简单安装。 参考: http://developer.51cto.com/art/201904/594615.htm ...
  • 最近在参与一个基于Elasticsearch作为底层数据框架提供大数据量(亿级)的实时统计查询的方案设计工作,花了些时间学习Elasticsearch的基础理论知识,整理了一下,希望能对Elasticsearch感兴趣/想了解的同学有所帮助。...
  • 2.查询请求的原理 首先客户端选择任意一个节点,发送请求get document id=1,P1 发送到node1上时,node1就是协调节点(coordinate node),coordinate node对document进行路由,路由之后,就知道在哪个primary ...
  • 本篇主要介绍聚合查询的内部原理,正排索引是如何建立的和优化的,fielddata的使用,最后简单介绍了聚合分析时如何选用深度优先和广度优先。 正排索引 聚合查询的内部原理是什么,Elastichsearch是用什么样的数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 81,845
精华内容 32,738
关键字:

es查询原理