簡體   English   中英

彈性查詢的性能

[英]Performance of elastic queries

每次執行時,此查詢需要200多毫秒:

{
  "filter": {
    "term": {
      "id": "123456",
      "_cache": true
    }
  }
}

但每次在第一次查詢后執行時,這個只需要2-3毫秒:

{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "term": {
          "id": "123456"
        }
      }
    }
  }
}

請注意兩個查詢中的相同ID值。 看起來第二個查詢使用第一個查詢的緩存結果。 但為什么第一個查詢不能使用緩存結果本身呢? 從第一個查詢中刪除"_cache" : true不會更改任何內容。

當我用其他ID執行第二個查詢時,第一次執行它需要大約40毫秒,之后每次需要2-3毫秒。 因此,第二個查詢不僅工作得更快,而且還緩存結果並將緩存用於后續調用。

所有這些都有解釋嗎?

第一個請求中的頂級filter元素在Elasticsearch中具有非常特殊的功能。 它用於過濾搜索結果而不影響構面。 為了避免干擾facet,此過濾器在結果收集期間應用,而不是在搜索期間應用,這會導致其性能降低。 使用沒有facet的頂級filter幾乎沒有意義,因為filteredconstant_score查詢通常可以提供更好的性能。 如果使用match_all filtered查詢的詳細程度困擾您,您可以將第二個請求重寫為等效的constant_score查詢:

{
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "id": "123456"
        }
      }
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM