互聯網上有一些示例可以為 Elasticsearch 檔案自定義 _id 欄位,但有沒有辦法生成多個欄位的復合 _id 。
樣本資料
{
"first_name": "john",
"last_name": "doe",
"dob": "1987-12-21",
"phone": "7894456123".
"so": "on"...
}
我如何配置索引管道以_id從第一個 4 個欄位的連接中生成,這些欄位對于用例來說被認為是復合主鍵。
需要注意的事項:
- _id 有字符限制,但 4 個欄位的連接可以隨時超過該限制。
- 使用某種單獨的,因此不能有 2 個具有不同欄位值但具有相同連接值的檔案。
我考慮使用散列演算法之類的MD5,SHA256它可以從"|".join(first,last,dob,phone). 但無法在攝取管道中實施
這不是安全問題,因為我們只是試圖定義一個主鍵,而索引是每月滾動的。
因此,如果我們能找到一個首選的存盤高效 _id 值。
如果還有其他方法可以實作用例,請提出建議。
uj5u.com熱心網友回復:
輸入fingerprint攝取處理器(自 ES 7.12.0 起)。
您可以使用該處理器定義一個攝取管道并_id按照您的預期設定該欄位:
PUT _ingest/pipeline/id-fingerprint
{
"processors": [
{
"fingerprint": {
"fields": ["first_name", "last_name", "dob", "phone"],
"target_field": "_id",
"method": "MD5"
}
}
]
}
然后當你索引你的檔案時,你可以簡單地參考那個管道
PUT test/_doc/1?pipeline=id-fingerprint
{
"first_name": "john",
"last_name": "doe",
"dob": "1987-12-21",
"phone": "7894456123",
"so": "on"
}
結果 =>
{
"_index" : "test",
"_type" : "_doc",
"_id" : "Xu28Onz3lbYCG0DrTTVp6Q==", <--- the generated ID
"_source" : {
"phone" : "7894456123",
"dob" : "1987-12-21",
"last_name" : "doe",
"so" : "on",
"first_name" : "john"
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/350364.html
