Elasticsearch数字ID生成

时间:2013-04-26 20:36:10

标签: json elasticsearch mvel

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

1 个答案:

答案 0 :(得分:0)

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

键入查询,忽略id以获取我所追求的行为。从api我不清楚你会得到相同的0-4记录,即使没有明确定义识别记录0-4的“id”。实际上,我现在只是使用字符串UUID进行测试。