簡體   English   中英

每次在彈性搜索中插入文檔時自動增加字段值

[英]Auto Increment a field value every time a doc is inserted in elastic search

我要求以這種格式生成唯一編號(ARN)

DD/MM/YYYY/1, DD/MM/YYYY/2

並將它們插入彈性搜索索引中。

我正在考慮的方法是在文檔中創建一個自動遞增字段,並使用它來生成新條目,並使用新的自動生成的編號來創建ARN並更新文檔。

我計划使用的doc結構:

{ id: 1, arn: 17/03/2018/01 }

這樣的事情。

如何在彈性搜索中獲取自動遞增字段?

這不可能一步完成。 首先,您必須將記錄插入數據庫,然后使用其ID更新ARN

例如,沒有等效的自動增量來休眠id生成器。 您可以使用Bulk API (如果必須一次保存多個文檔),並以編程方式增加_id和ARN值的結尾。

注意: 如果要將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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM