如何获取elasticsearch的自动增量ID

KDA*_*DAO 24 elasticsearch

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

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

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

jrw*_*ren 18

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

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

  • 自动增量ID生成(int)有什么用吗? (2认同)
  • @lazzy_ms 没有。AFAIK 是一种弹性搜索反模式。 (2认同)

小智 6

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

主要优点是iid可以使用简单转储进行备份,其中使用_versionelasticsearch 的实现无法备份版本.

它允许请求大量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
  }
}'
Run Code Online (Sandbox Code Playgroud)

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

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"
        }
      }
    }
  }
}'
Run Code Online (Sandbox Code Playgroud)

可以在此处找到更详细的描述:

  • 如果没有提供基本细节的简短摘要,请不要发布链接文章.如果链接停止工作,您的答案将变得毫无价值. (4认同)

ana*_*ico 3

据我所知,从 Elasticsearch v1.1.0 开始,没有对自动递增 id 的原生支持。而且官方文档也没有提到任何类似的功能。

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

顺便说一句,我基于这种方法实现了一个node.js 模块。