2013-04-26 42 views
0

我使用elasticsearch插入來自不同客戶端應用程序的文檔。我有不同的客戶端插入,所以我不能只在本地存儲下一個ID ...我需要查找彈性搜索的下一個預期的ID。我正在使用基於整數的ID生成方案,例如在網站上的許多「twitter」示例中完成的。我的問題是如何最好地查找最後的ID? ID被存儲爲一個字符串,因此運行的排序操作無法正常工作,如:Elasticsearch數字標識生成

curl -XGET 'http://localhost:4040/search/geolocations/geos/_search' -d '{ 
    "sort": [ 
    { 
     "_id": { 
     "order": "asc" 
     } 
    } 
    ], 
    "query": { 
    "match_all": {} 
    } 
}' 

對於上面的,如果你有1,2,10,11,存儲:其結果將具有「2」是最高...這可能是正確的字符串,但不是一個整數。

我想堅持一個整數ID在這裏,而不是切換到傳統的字符串UUID。

我一直在使用考慮: http://www.elasticsearch.org/guide/reference/query-dsl/script-filter/

運行一個腳本,將投ID字符串爲整數......但也似乎是一個不錯的辦法,並不清楚如何將與工作相結合JSON和MVEL語法。

與製造企圖:

curl -XGET 'http://localhost:4040/search/geolocations/geos/_search' -d '{ 
    "sort": { 
    "_script": { 
     "script": "doc['_id'].value", 
     "type": "number", 
     "order": "asc" 
    } 
    }, 
    "query": { 
    "match_all": {} 
    } 
}' 

但意識到它不解析。

另一個說明,我希望增加新的記錄是一個相當罕見的操作,所以這裏的性能並不那麼關鍵。我寧願選擇昂貴的查詢操作,而不是重新將輪換切換到不同的id方案,即基於非整數。

回答

0

我能夠使用: "from":0,"size" : 5,"query" : {"match_all" : {}}

類型查詢忽略ID來獲得我以後的行爲。從api中我不清楚你會得到相同的0-4記錄,即使沒有明確定義識別記錄0-4的「id」。事實上,我現在只是使用字符串UUID進行測試。