0

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

4

1 回答 1

0

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

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

于 2013-04-27T01:21:47.927 回答