2013-04-26 49 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进行测试。