[英]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
幾乎沒有意義,因為filtered
和constant_score
查詢通常可以提供更好的性能。 如果使用match_all
filtered
查詢的詳細程度困擾您,您可以將第二個請求重寫為等效的constant_score
查詢:
{
"query": {
"constant_score": {
"filter": {
"term": {
"id": "123456"
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.