Elasticsearch的搜索类型(SearchType类型)

Elasticsearch的搜索类型(SearchType类型)
一、 query and fetch

  向索引的全部分片 ( shard)都发出查询请求, 各分片返回的时候把元素文档 ( document)和计算后的排名信息一块儿返回。
  这种搜索方式是最快的。 由于相比下面的几种搜索方式, 这种查询方法只须要去 shard查询一次。 可是各个 shard 返回的结果的数量之和多是用户要求的 size 的 n 倍。
  优势:这种搜索方式是最快的。由于相比后面的几种es的搜索方式,这种查询方法只须要去shard查询一次。
  缺点:返回的数据量不许确, 可能返回(N*分片数量)的数据而且数据排名也不许确,同时各个shard返回的结果的数量之和多是用户要求的size的n倍。
   性能

二、 query then fetch( es 默认的搜索方式)

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

三、 DFS query and fetch

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

四、 DFS query then fetch

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

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

  DFS 是一个什么样的过程?

  从 es 的官方网站咱们能够发现, DFS 其实就是在进行真正的查询以前, 先把各个分片的词频率和文档频率收集一下, 而后进行词搜索的时候, 各分片依据全局的词频率和文档频率进行搜索和排名。 显然若是使用 DFS_QUERY_THEN_FETCH 这种查询方式, 效率是最低的,由于一个搜索, 可能要请求 3 次分片。 但, 使用 DFS 方法, 搜索精度是最高的。索引

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

相关文章
相关标签/搜索