1. 程式人生 > >elasticsearch 搜尋過程

elasticsearch 搜尋過程

https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-search-type.html#dfs-query-then-fetch

查詢型別(引數search_type指定):
(一)        query_then_fetch
分為兩個階段:
1)        協調節點將請求傳送到與搜尋語句相關的索引分片(即搜尋語句中索引的所有分片)上,各分片分別進行查詢(因為每個分片都是一個獨立的lucene索引)得到結果,並進行排序,得出(from+size)大小的結果集,然後將輕量級的資訊(足夠協調節點重新排序)傳送給協調節點。協調節點接收到所有分片(超時不侯)的結果,並進行全域性排序,這樣得到[from,from+size)的結果集。


2)        協調節點從與最終結果相關的分片中獲取文件的內容(包括高亮顯示的分片等),並返回給客戶端。
(二)        dfs_query_then_fetch
過程跟query_then_fetch是一樣的,不同之處在於第一階段在計算score的時候使用的term frequency是local的,即只用自己分片的term frequency,會產生的問題是,可能相同的內容在不同的分片得到的得分不一樣,也可能出現明明更相關的文件的得分反而比不那麼相關的文件的score小。而dfs_query_then_fetch使用全域性的term frequency,這樣可以得到更準確的scoring。