我正在使用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方案,即非基于整数。
答案 0 :(得分:0)
我能够使用:
"from":0,"size" : 5,"query" : {"match_all" : {}}
键入查询,忽略id以获取我所追求的行为。从api我不清楚你会得到相同的0-4记录,即使没有明确定义识别记录0-4的“id”。实际上,我现在只是使用字符串UUID进行测试。