【问题标题】:Elasticsearch _id as MD5 hash or document fieldsElasticsearch _id 作为 MD5 哈希或文档字段
【发布时间】:2021-11-05 08:26:00
【问题描述】:

互联网上有一些示例可以为 Elasticsearch 文档自定义 _id 字段,但有没有办法生成多个字段的复合 _id。

样本数据

{
  "first_name": "john",
  "last_name": "doe",
  "dob": "1987-12-21",
  "phone": "7894456123".
  "so": "on"...
}

如何配置索引管道以从首先连接的 4 个字段生成 _id,对于用例,这些字段被认为是复合主键。

注意事项:

  • _id 有字符限制,但 4 个字段的连接可以随时超过。
  • 使用某种单独的方式,因此不能有 2 个具有不同字段值但连接值相同的文档。

我考虑使用像MD5SHA256 这样的散列算法,它们可以从"|".join(first,last,dob,phone) 生成固定长度的_id。但无法在摄取管道中实现

这不是安全问题,因为我们只是尝试定义一个主键,并且索引是按月滚动的。

所以如果我们能找到一个存储效率高的 _id 值是首选。

如果有其他方法可以实现用例,请提出建议。

【问题讨论】:

    标签: elasticsearch pipeline data-ingestion


    【解决方案1】:

    输入fingerprint ingest processor(从 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"
        }
      }
    

    【讨论】:

    • 如果一个文档的字段被索引为整数,第二个为具有相同值的字符串,则不处理。该索引已为该字段创建了映射以将其声明为整数,但它仍然创建了 2 个文档,其中一个将电话号码作为整数,另一个使用字符串。你知道解决方法吗?
    • 您应该确保简化您的索引过程以始终以相同的方式索引
    • 这是唯一的方法吗?问题是应用程序聚合了来自多个来源的数据,如果索引器直接调用 ES API,则可能会有这样的事情通过。无论如何升级的另一个原因。
    • 我会在fingerprint 上面添加几个convert processors,以确保在指纹识别之前将所有内容转换为正确的类型。
    猜你喜欢
    • 1970-01-01
    • 2011-05-05
    • 2012-08-17
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    相关资源
    最近更新 更多