2013-05-12 81 views
1

如何從查詢的緩存副本中獲取分頁查詢中的數據?通過elasticsearch中的緩存搜索查詢進行分頁

搜索時,我們默認會得到10個結果(最大)。 我們也可以指定「大小」和「來自」。

但是,(在尋找一個簡單的查詢,這只是爲了簡單)我不知道,如果我拼版這樣:

curl -XPOST 'http://localhost:9200/index1/type1/_search' -d '{ 
    "query": { 
    "match_all": {} 
    }, 
    "from": 0, 
    "size": 10 
}' 

curl -XPOST 'http://localhost:9200/index1/type1/_search' -d '{ 
    "query": { 
    "match_all": {} 
    }, 
    "from": 10, 
    "size": 10 
}' 

curl -XPOST 'http://localhost:9200/index1/type1/_search' -d '{ 
    "query": { 
    "match_all": {} 
    }, 
    "from": 20, 
    "size": 10 
}' 

是,在每次執行服務器上的查詢,然後一「頁」返回?或者只是第一次緩存和執行查詢?

我可以看到一個用兩個usecases:

  1. 如果每次重新執行,這將反映對可能發生的文檔。
  2. 如果它被緩存,它會在服務器上創建更少的負載。具體來說,這可以用來創建從服務器到客戶端的某個「reducer」的「流」。 (在這種情況下,我希望查詢返回到下一頁的鏈接)。

我該如何執行這兩種情況。哪一個是默認的?

此外,如果我的查詢將運行排序腳本會發生什麼?例如:

curl -XPOST 'http://localhost:9200/index1/type1/_search' -d '{ 
    "query": { 
    "match_all": {} 
    }, 
    "sort": { 
    "_script": { 
     "script": "Math.random()", 
     "type": "number", 
     "order": "asc" 
    } 
    }, 
    "from": 0, 
    "size": 10 
}' 

curl -XPOST 'http://localhost:9200/index1/type1/_search' -d '{ 
    "query": { 
    "match_all": {} 
    }, 
    "sort": { 
    "_script": { 
     "script": "Math.random()", 
     "type": "number", 
     "order": "asc" 
    } 
    }, 
    "from": 10, 
    "size": 10 
}' 

將隨機排序應用兩次(所以我可能會得到一些項目出現在兩個查詢中)?如何防止並將查詢「鎖定」爲分頁?

回答

1

兩歲的問題,未回答。我正在回答,因爲我討厭遇到沒有答案的問題,我正在做我的一點。

一種功能,ElasticSearch提供的是Scroll API(可回v0.9,仍然可以在1.5與變化不大)

此功能可讓您存儲緩存的查詢結果集(默認過期爲1分鐘)。除非在此1m內進行另一個後續查詢,否則查詢結果集將發送到新版本的分片。

當你有很多活的和移動的數據時,這非常方便。在遷移或更新映射期間將數據遷移到/從索引遷移數據時特別有用。