• elk之查询方式(4种)


    es 在查询时, 可以指定搜索类型为下面四种:
      QUERY_THEN_FETCH
      QUERY_AND_FEATCH
      DFS_QUERY_THEN_FEATCH

      DFS_QUERY_AND_FEATCH

    1、 query and fetch
      向索引的所有分片 ( shard)都发出查询请求, 各分片返回的时候把元素文档 ( document)和计算后的排名信息一起返回。
      这种搜索方式是最快的。 因为相比下面的几种搜索方式, 这种查询方法只需要去 shard查询一次。 但是各个 shard 返回的结果的数量之和可能是用户要求的 size 的 n 倍。
      优点:这种搜索方式是最快的。因为相比后面的几种es的搜索方式,这种查询方法只需要去shard查询一次。
      缺点:返回的数据量不准确, 可能返回(N*分片数量)的数据并且数据排名也不准确,同时各个shard返回的结果的数量之和可能是用户要求的size的n倍。
       

    2、 query then fetch( es 默认的搜索方式)
      如果你搜索时, 没有指定搜索方式, 就是使用的这种搜索方式。 这种搜索方式, 大概分两个步骤:
      第一步, 先向所有的 shard 发出请求, 各分片只返回文档 id(注意, 不包括文档 document)和排名相关的信息(也就是文档对应的分值), 然后按照各分片返回的文档的分数进行重新排序和排名, 取前 size 个文档。
      第二步, 根据文档 id 去相关的 shard 取 document。 这种方式返回的 document 数量与用户要求的大小是相等的。
      优点:
        返回的数据量是准确的。
      缺点:
        性能一般,并且数据排名不准确。

    3、 DFS query and fetch
      这种方式比第一种方式多了一个 DFS 步骤,有这一步,可以更精确控制搜索打分和排名。也就是在进行查询之前, 先对所有分片发送请求, 把所有分片中的词频和文档频率等打分依据全部汇总到一块, 再执行后面的操作、
      优点:
        数据排名准确
      缺点:
        性能一般
        返回的数据量不准确, 可能返回(N*分片数量)的数据

    4、 DFS query then fetch
      比第 2 种方式多了一个 DFS 步骤。
      也就是在进行查询之前, 先对所有分片发送请求, 把所有分片中的词频和文档频率等打分依据全部汇总到一块, 再执行后面的操作、

      优点:
        返回的数据量是准确的
        数据排名准确
      缺点:
        性能最差【 这个最差只是表示在这四种查询方式中性能最慢, 也不至于不能忍受,如果对查询性能要求不是非常高, 而对查询准确度要求比较高的时候可以考虑这个】

    总结:每种方式的时间

    QUERY_AND_FETCH
    0-1534820294505
    1-1534820294541


    QUERY_THEN_FETCH

    0-1534820356610
    1-1534820356641

    DFS_QUERY_THEN_FETCH
    0-1534820407588
    1-1534820407621

    DEFAULT
    0-1534820503041
    1-1534820503071

  • 相关阅读:
    TCP和UDP的主要特点
    C++ this和*this的区别
    C++空类中含有哪些默认的函数
    const关键字的用途
    哪些函数不能成为虚函数?
    C++是不是类型安全带的?
    多线程 测试
    多线程 采用三个线程 依次数到75
    多线程 实现控制台打印“我爱你”10遍
    多线程 创建子父线程 保证一件事 子线程执行三次后 父线程执行5次 循环10次
  • 原文地址:https://www.cnblogs.com/-flq/p/9505880.html
Copyright © 2020-2023  润新知