2016-12-14 57 views
0

我使用R查詢ElasticSearch(使用彈性客戶端),似乎我無法訪問超過1000條記錄。即使$hits$total返回4187.記錄數限制爲1000(Elasticsearch上的R客戶端)

以下是應用於返回列表時str函數的第一行。

List of 4 
$ took  : int 1844 
$ timed_out: logi FALSE 
$ _shards :List of 3 
    ..$ total  : int 692 
    ..$ successful: int 692 
    ..$ failed : int 0 
$ hits  :List of 3 
    ..$ total : int 4187 
    ..$ max_score: num 1 
    ..$ hits  :List of 1000 

如果我限制我的查詢較少的記錄,我不明白這個問題。以下是str功能的第一線時,應用到返回的列表,在這裏我們看到,$hits$total等於返回列表的數量 - 我想這可能是由於一些配置參數$hits$hits

List of 4 
$ took  : int 157 
$ timed_out: logi FALSE 
$ _shards :List of 3 
    ..$ total  : int 692 
    ..$ successful: int 692 
    ..$ failed : int 0 
$ hits  :List of 3 
    ..$ total : int 13 
    ..$ max_score: num 1 
    ..$ hits  :List of 13 

,因爲這個限制如此確切。我如何避免這種限制並訪問所有列表/記錄數量?

EDIT:(附加信息)

參數body

bdy <- '{ 
"id": "getKpiHistMetric", 
"params": {"KpiKey":"Agg:Net|SL,Wind:10min,Net:PT,SL:1,Metric:Rate", 
"from": "2016-11-01T00:00:00", 
"to": "2016-11-30T23:59:59"} 
}' 

作用中,在整個列表時的錯誤apears。首先,我創建一個空的data.frame

df <- data.frame(DATE = integer(), 
       TICK = integer(), 
       VALUE = double(), stringsAsFactors = FALSE) 

然後我填滿它:

for(i in 1:q$hits$total){ 

    a <- as.Date(as.POSIXct(q$hits$hits[[i]]$`_source`$Timestamp/1000, origin="1970-01-01"), format = "%m/%d/%y") 
    b <- strftime(as.POSIXct(round(q$hits$hits[[i]]$`_source`$Timestamp/1000, -1), origin="1970-01-01"), format = "%H:%M") 
    c <- q$hits$hits[[i]]$`_source`$Value 

    df.row <- data.frame(DATE = a, TICK = b, VALUE = c, stringsAsFactors = FALSE) 
    df <- rbind(df, df.row) 

} 

這時我收到以下錯誤:

Error in q$hits$hits[[i]] : subscript out of bounds

這時,i = 1001

+0

你應該能夠使用默認的ES配置高達10000。你使用'size'參數嗎?或者你可以在正文 – sckott

+0

中做到這一點,這個錯誤與'elastic' pkg沒有多大關係,這就是你在for循環中的內容,你試圖對ES中的結果建立索引,而這些結果不再有任何結果 – sckott

回答

0

麻痹的原因呃記錄限於1000是由於elasticsearch的配置。這是我從數據庫維護團隊獲得的答案。