我需要将唯一的自动增量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.
小智 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)
可以在此处找到更详细的描述:
据我所知,从 Elasticsearch v1.1.0 开始,没有对自动递增 id 的原生支持。而且官方文档也没有提到任何类似的功能。
您提到的博文采用了可行的方法。它的好处是可以保留 Elasticsearch 中使用的最后一个 id。与在 Redis 或任何其他外部数据源中存储自动递增值相比,您不必担心生产中的系统崩溃。这样就不会存在两个可能不同步的数据源。
顺便说一句,我基于这种方法实现了一个node.js 模块。
| 归档时间: |
|
| 查看次数: |
30392 次 |
| 最近记录: |