Elasticsearch 几种 Search Type

Search Type 有助于理解 Elasticsearch 在多个分片(shard)的情况下,是如何搜索的,是如何决定返回数据数量、如何排序、如何算分的?

执行过程

在多个分片情况下,查询 0-20 条记录,elasticsearch 会将请求转发到每个分片上,从每个分片上获取 20 条记录,然后返回给分发节点进行汇总,最后再从汇总的结果中取 0-20 数据返回给客户端。
则就是 elasticsearch 分布式搜索的基本的执行过程。

Search Type

Elasticsearch 中的 search type 主要有 6种:Query then fetch、Dfs Query then fetch、Count、Scan、Query and fetch、Dfs query and fetch。

执行请求的过程中,涉及到几个不同的 search type。

  • Query then fetch
    查询主要分为两步:
    第一步,查询节点首先将请求转发给所有参与的节点,每个节点依据自身的数据执行查询,并将必要的信息返回给查询节点,查询节点进行合并、重新排序等操作。
    第二步,查询节点仅从相关的节点获取数据返回。

    如果没有在请求中没有指定 search_type 参数这这是默认的方式。

  • Dfs Query then fetch

    和 Query then fetch 一样,只不过在第一步转发请求的时候,它将计算分布式词频来获得更准确的得分。

  • Count

    顾名思义,这个并不返回文档数据,只返回文档的数量。

  • Scan

    适用于大量数据进行深度分页获取数据,禁用排序提升性能。

  • Query and fetch

    这是 elasticsearch 内部的一种优化,不需要手动指定。当请求只作用在一个节点上面的是否,Query then fetch 的两步就合并为一步执行了。当我们有时候为了避免聚合(Aggregation)不准确而将 numbers_of_shards 设置为1个的时候,所有的请求就只在一个节点上处理。

  • Dfs Query and fetch

    同 Dfs Query and fetch,也不需要手动执行,请求作用于单个节点时候的一种内部优化机制。

0%