一、搜索被執行成一個兩階段過程,咱們稱之爲 Query Then Fetch;ide
二、在初始查詢階段時,查詢會廣播到索引中每個分片拷貝(主分片或者副本分性能
片)。 每一個分片在本地執行搜索並構建一個匹配文檔的大小爲 from + size 的排序
優先隊列。索引
PS:在搜索的時候是會查詢 Filesystem Cache 的,可是有部分數據還在 Memory隊列
Buffer,因此搜索是近實時的。文檔
三、每一個分片返回各自優先隊列中 全部文檔的 ID 和排序值 給協調節點,它合併it
這些值到本身的優先隊列中來產生一個全局排序後的結果列表。class
四、接下來就是 取回階段,協調節點辨別出哪些文檔須要被取回並向相關的分片搜索
提交多個 GET 請求。每一個分片加載並 豐富 文檔,若是有須要的話,接着返回請求
文檔給協調節點。一旦全部的文檔都被取回了,協調節點返回結果給客戶端。
五、補充:Query Then Fetch 的搜索類型在文檔相關性打分的時候參考的是本分
片的數據,這樣在文檔數量較少的時候可能不夠準確,DFS Query Then Fetch 增
加了一個預查詢的處理,詢問 Term 和 Document frequency,這個評分更準確,
可是性能會變差。*