如何获取elasticsearch的自动增量ID

时间:2014-03-18 05:57:43

标签: elasticsearch

我需要将唯一的自动增量ID与我在ElasticSearch中的文档中的其余字段一起存储。无论如何在ElasticSearch中都可以获得它们。

我发现这是一个潜在的解决方案:http://blogs.perl.org/users/clinton_gormley/2011/10/elasticsearchsequence---a-blazing-fast-ticket-server.html

但我只是想知道还有更好的方法吗?

4 个答案:

答案 0 :(得分:17)

1.x参考文档API表示您可以不使用ID,它将自动生成。使用POST而不是put,op_type将自动设置为create。

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-index_.html#_automatic_id_generation

答案 1 :(得分:5)

以下是使用elasticsearch创建iids的另一种方法:

主要优点是可以使用简单转储备份iid,其中使用_version elasticsearch的实现无法备份版本。

它允许请求大量iid以最小化所需请求的数量。

获得大量10 iids的请求将如下所示:

curl -XPOST "http://localhost:9200/sequence/sequence/1/_updatefields=iid&retry_on_conflict=5" -d '{
  "script": "ctx._source.iid += bulk_size",
  "params": {
    "bulk_size": 10
  },
  "lang": "groovy",
  "upsert": {
    "iid": 0
  }
}'

它需要索引的这个(优化的)映射:

curl -XPOST http://localhost:9200/sequence/_mapping -d '{
  "settings": {
    "number_of_shards": 1,
    "auto_expand_replicas": "0-all"
  },
  "mappings": {
    "sequence": {
      "_all": {
        "enabled": 0
      },
      "_type": {
        "index": "no"
      },
      "dynamic": "strict",
      "properties": {
        "iid": {
          "type": "string",
          "index": "no"
        }
      }
    }
  }
}'

可以找到更详细的说明here

答案 2 :(得分:3)

从Elasticsearch v1.1.0开始,就我所知,没有对自动递增ID的原生支持。此外official documentation未提及此类任何功能。

您提到的博客文章采用了可行的方法。它具有保留Elasticsearch中使用的最后一个id的好处。与例如相比在Redis或任何其他外部数据源中存储自动递增的值,您不必担心生产中的系统崩溃。然后没有两个数据源可能不同步。

顺便说一句,我基于这种方法实施了node.js module

答案 3 :(得分:0)

根据您想要完全实现的目标,这可能是一个选项 - 它仍然处于非常早期的开发阶段:https://github.com/elastic/elasticsearch/issues/10708