Elasticsearch 分布式搜索的运行机制
Elasticsearch 分布式搜索的运行机制
ES 有两种 search_type
即搜索类型:
query_then_fetch
(默认)dfs_query_then_fetch
query_then_fetch
- 用户发起搜索,请求到集群中的某个节点。
- query 会被发送到所有相关的 shard 分片上。
- 每个 shard 分片独立执行 query 搜索文档并进行排序分页等,打分时使用的是分片本身的
Local
Term/Document 频率。 - 分片的 query 结果(只有元数据,例如
_id
和_score
)返回给请求节点。 - 请求节点对所有分片的 query 结果进行汇总,然后根据打分排序和分页,最后选择出搜索结果文档(也只有元数据)。
- 根据元数据去对应的 shard 分片拉取存储在磁盘上的文档的详细数据。
- 得到详细的文档数据,组成搜索结果,将结果返回给用户。
缺点:由于每个分片独立使用自身的而不是全局的 Term/Document 频率进行相关度打分,当数据分布不均匀时可能会造成打分偏差,从而影响最终搜索结果的相关性。