2 个回答
Elasticsearch 搜索的过程如下:
1、搜索被执行成一个两阶段过程,我们称之为 Query Then Fetch;
2、在初始查询阶段时,查询会广播到索引中每一个分片拷贝(主分片或者副本分片)。 每个分片在本地执行搜索并构建一个匹配文档的大小为 from + size 的优先队列。
3、每个分片返回各自优先队列中 所有文档的 ID 和排序值 给协调节点,它合并这些值到自己的优先队列中来产生一个全局排序后的结果列表。
4、接下来就是 取回阶段,协调节点辨别出哪些文档需要被取回并向相关的分片提交多个 GET 请求。每个分片加载并 丰 富 文档,如果有需要的话,接着返回文档给协调节点。一旦所有的文档都被取回了,协调节点返回结果给客户端。
5、Query Then Fetch 的搜索类型在文档相关性打分的时候参考的是本分片的数据,这样在文档数量较少的时候可能不够准确,DFS Query Then Fetch 增加了一个预查询的处理,询问 Term 和Document frequency,这个评分更准确,但是性能会变差。
发布于:2周前 (04-17) IP属地:

搜索拆解为“query then fetch” 两个阶段。
query 阶段的目的:定位到位置,但不取:
路由节点获取所有文档,返回给客户端。
query 阶段的目的:定位到位置,但不取:
1、假设一个索引数据有 5 主+1 副本 共 10 分片,一次请求会命中(主或者副本分片中)的一个。
2、每个分片在本地进行查询,结果返回到本地有序的优先队列中。
3、第 2步骤的结果发送到协调节点,协调节点产生一个全局的排序列表。
fetch 阶段的目的:取数据。路由节点获取所有文档,返回给客户端。
发布于:2周前 (04-17) IP属地:
我来回答
您需要 登录 后回答此问题!