我正在使用elasticsearch插入来自不同客户端应用程序的文档。我有不同的客户端进行插入,所以我不能只在本地存储下一个id…我需要在elasticsearch中查找下一个预期的id。我正在使用一个基于整数的ID生成方案,例如在网站上的许多"twitter“示例中所做的。我的问题是如何最好地查找最后的id?id被存储为字符串,因此运行排序操作不起作用,例如:
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方案,即基于非整数的方案。
发布于 2013-04-27 09:21:48
我可以使用:"from":0,"size" : 5,"query" : {"match_all" : {}}
在忽略id的情况下输入查询,以获得我想要的行为。对于我来说,即使没有显式定义标识记录0-4的"id“,api也不清楚您是否会得到相同的0-4记录。实际上,我现在只是使用字符串UUID进行测试。
https://stackoverflow.com/questions/16244805
复制相似问题