我需要将唯一的自动增量ID与我在ElasticSearch中的文档中的其余字段一起存储。无论如何在ElasticSearch中都可以获得它们。
我发现这是一个潜在的解决方案:http://blogs.perl.org/users/clinton_gormley/2011/10/elasticsearchsequence---a-blazing-fast-ticket-server.html
但我只是想知道还有更好的方法吗?
答案 0 :(得分:17)
1.x参考文档API表示您可以不使用ID,它将自动生成。使用POST而不是put,op_type将自动设置为create。
答案 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