Elasticsearch的搜索類型(SearchType類型)

Elasticsearch的搜索類型(SearchType類型)
一、 query and fetch

  向索引的全部分片 ( shard)都發出查詢請求, 各分片返回的時候把元素文檔 ( document)和計算後的排名信息一塊兒返回。
  這種搜索方式是最快的。 由於相比下面的幾種搜索方式, 這種查詢方法只須要去 shard查詢一次。 可是各個 shard 返回的結果的數量之和多是用戶要求的 size 的 n 倍。
  優勢:這種搜索方式是最快的。由於相比後面的幾種es的搜索方式,這種查詢方法只須要去shard查詢一次。
  缺點:返回的數據量不許確, 可能返回(N*分片數量)的數據而且數據排名也不許確,同時各個shard返回的結果的數量之和多是用戶要求的size的n倍。
   性能

二、 query then fetch( es 默認的搜索方式)

  若是你搜索時, 沒有指定搜索方式, 就是使用的這種搜索方式。 這種搜索方式, 大概分兩個步驟:
  第一步, 先向全部的 shard 發出請求, 各分片只返回文檔 id(注意, 不包括文檔 document)和排名相關的信息(也就是文檔對應的分值), 而後按照各分片返回的文檔的分數進行從新排序和排名, 取前 size 個文檔。
  第二步, 根據文檔 id 去相關的 shard 取 document。 這種方式返回的 document 數量與用戶要求的大小是相等的。
  優勢:
    返回的數據量是準確的。
  缺點:
    性能通常,而且數據排名不許確。fetch

三、 DFS query and fetch

  這種方式比第一種方式多了一個 DFS 步驟,有這一步,能夠更精確控制搜索打分和排名。也就是在進行查詢以前, 先對全部分片發送請求, 把全部分片中的詞頻和文檔頻率等打分依據所有彙總到一塊, 再執行後面的操做、
  優勢:
    數據排名準確
  缺點:
    性能通常
    返回的數據量不許確, 可能返回(N*分片數量)的數據網站

四、 DFS query then fetch

  比第 2 種方式多了一個 DFS 步驟。
  也就是在進行查詢以前, 先對全部分片發送請求, 把全部分片中的詞頻和文檔頻率等打分依據所有彙總到一塊, 再執行後面的操做、code

  優勢:
    返回的數據量是準確的
    數據排名準確
  缺點:
    性能最差【 這個最差只是表示在這四種查詢方式中性能最慢, 也不至於不能忍受,若是對查詢性能要求不是很是高, 而對查詢準確度要求比較高的時候能夠考慮這個】排序

  DFS 是一個什麼樣的過程?

  從 es 的官方網站咱們能夠發現, DFS 其實就是在進行真正的查詢以前, 先把各個分片的詞頻率和文檔頻率收集一下, 而後進行詞搜索的時候, 各分片依據全局的詞頻率和文檔頻率進行搜索和排名。 顯然若是使用 DFS_QUERY_THEN_FETCH 這種查詢方式, 效率是最低的,由於一個搜索, 可能要請求 3 次分片。 但, 使用 DFS 方法, 搜索精度是最高的。索引

  總結一下, 從性能考慮 QUERY_AND_FETCH 是最快的, DFS_QUERY_THEN_FETCH 是最慢的。從搜索的準確度來講, DFS 要比非 DFS 的準確度更高。文檔

相關文章
相關標籤/搜索