我需要以这种格式生成唯一编号 (ARN(
DD/MM/YYYY/1, DD/MM/YYYY/2
并将其插入弹性搜索索引中。
我正在考虑的方法是在文档中创建一个自动增量字段并使用它来生成一个新条目,并使用新的自动生成的数字来创建 ARN 并更新文档。
我计划使用的文档结构:
{ id: 1, arn: 17/03/2018/01 }
像这样的东西。
如何在弹性搜索中获取自动递增字段?
它不能一步完成。首先,您必须将记录插入数据库,然后使用其 id 更新 ARN
没有自动增量等效项,例如,休眠 id 生成器。您可以使用批量 API(如果必须一次保存多个文档(并以编程方式增加 ARN 值的_id和结束时间。
注意: 如果你想把你的id视为一个数字,你应该自己实现它(在这个例子中,我添加了一个新字段"my_id",因为文档的_id被视为一个字符串。
POST /bulk
{ "index" : { "_index" : "your_index", "_type" : "your_type", "_id" : "1" } }
{ "arn" : "2018/03/17/1", my_id: 1 }
{ "index" : { "_index" : "your_index", "_type" : "your_type", "_id" : "2" } }
{ "arn" : "2018/03/17/2", my_id: 2 }
然后,下次要保存新文档时,请查询最大 id,如下所示:
POST /my_index/my_type/_search?size=1
{
"query": {
"fields": ["my_id"],
"sort": [{
"my_id": { "order": "desc" } }
]
}
}
如果您的唯一要求是此 ARN 应该是唯一的,您也可以让 elasticsearch 通过简单地不设置来计算您的_id。然后你可以在一些独特的令牌生成器上中继(如果使用java,UID.randomUUID().toString()
(。伪代码如下:
String uuid = generateUUID() // depends on the programming language
String payload = "{ "arn" : + uuid + "}" // concatenate the payload
String url = "http://localhost:9200/my_index" // your target index
executePost(url, payload) // implement the call with some http client library