elasticsearch學習筆記(三十二)——Elasticsearch 解密query、fetch phrase原理

query pharse

基本原理:
(1)搜索請求發送到某一個coordinate node協調節點,會構建一個priority queue,長度以paging操做from和size爲準,默認是10
(2)coordinate node將請求轉發到全部的shard,每一個shard本地搜索,並構建一個本地的priority queue
(3)各個shard將本身的priority queue返回給coordinate node,並構建一個全局的priority queuenode

fetch phrase

基本原理:
(1)coordinate node協調節點構建完priority queue以後,就發送mget請求去全部shard上獲取對應的document
(2)各個shard將document返回給coordinate node
(3)coordinate node將合併後的document結果返回給客戶端。segmentfault

也就是ES的query pharse是根據priority queue去構建搜索結果的

示例

elasticsearch學習筆記(二十三)——Elasticsearch 分頁搜索以及深分頁性能問題
https://segmentfault.com/a/11...
好比總共有60000條數據,三個primary shard,每一個shard上分了20000條數據,每頁是10條數據,這個時候,你要搜索到第1000頁,實際上要拿到的是10001~10010,也就是會構建一個10010大小的priority queue。elasticsearch

注意這裏千萬不要理解成每一個shard都是返回10條數據。這樣理解是錯誤的!性能

下面作一下詳細的分析:
請求首先多是打到一個不包含這個index的shard的node上去,這個node就是一個協調節點coordinate node,那麼這個coordinate node就會將搜索請求轉發到index的三個shard所在的node上去。好比說咱們以前說的狀況下,要搜索60000條數據中的第1000頁,實際上每一個shard都要將內部的20000條數據中的第10001~10010條數據,拿出來,不是才10條,是10010條數據。3個shard的每一個shard都返回10010條數據給協調節點coordinate node,coordinate node會收到總共30030條數據,此時會構建一個30030大小的priority queue,而後在這些數據中進行排序,根據_score相關度分數,而後取到10001~10010這10條數據,就是咱們要的第1000頁的10條數據。
以下圖所示:
圖片描述學習

相關文章
相關標籤/搜索