ElasticSearch 开发总结(九)——SearchType:DFS_QUERY_THEN_FETCH和QUERY_THEN_FETCH-CSDN博客
1.SearchType
ES的搜索类型 有一个类SearchType(如下图示),关于该类的描述:
Search type represent the manner at which the search operation is executed.
ES的搜索分scatter/gather两个步骤:
scatter阶段:客户端向10个分片发起搜索请求;
gather阶段:10个分片完成搜索,符合条件的结果返回;
客户端,将返回的结果进行重新拍下和排名,最后返回给用户。
搜索面临的两个问题:
问题1:假如集群一个节点有10个分片,词语“土豆”在分片的相关性从分片0到分片9依次降低(即分片0存储词语“土豆”相关性最大,分片9相关性最小),如果搜索词语“土豆”需要10个分片的计算;
问题2:如果针对特定的分片进行搜索,因为词语“土豆”在每个分片的相关性不一致,可能返回的结果也存在偏差。
针对以上问题,ES给允许设置search_type来解决上述问题
SearchType共四种类型:
1、query and fetch
向索引的所有分片(shard)都发出查询请求,各分片返回的时候把元素文档(document)和计算后的排名信息一起返回。这种搜索方式是最快的。因为相比下面的几种搜索方式,这种查询方法只需要去shard查询一次。但是各个shard返回的结果的数量之和可能是用户要求的size的n倍。
2、query then fetch(默认的搜索方式)