我正在使用 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 方案,即基于非整数的方案。