首页 > 解决方案 > Elasticsearch 7.13 使用来自另一个索引的匹配字段值填充(丰富)索引

问题描述

我会按原样写我的问题;

您的集群下有两个索引;地震和震级类型

假设地震索引有一堆字段,“MagnitudeType”magnitude_type 索引有“MagnitudeType”和“MagnitudeTypeDesc”

你想创建一个名为 my_index 的新索引;my_index 应该包含所有来自地震的文档,我们将在 my_index 中添加“MagnitudeTypeDesc”字段,然后根据“MagnitudeType”字段匹配的magnitude_type索引填充它。

怎么能做到这一点?

谢谢

更新!!!!

我使用了 Val 的建议如下,

PUT /_enrich/policy/second-index-policy
{
"match": {
  "indices": "magnitude_type",
   "match_field": "MagnitudeType",
   "enrich_fields": ["MagnitudeTypeDesc"]
 }
}
PUT /_enrich/policy/second-index-policy/_execute

PUT /_ingest/pipeline/second_index_lookup
{
 "processors" : [
   {
     "enrich" : {
       "description": "Update data from the second index",
       "policy_name": "second-index-policy",
       "field" : "MagnitudeType",
       "target_field": "MagnitudeType"
  }
}
]
}

POST _reindex
{
 "source": {
   "index": "earthquakes"
},
 "dest": {
  "index": "new_index",
  "pipeline": "second_index_lookup"
}
}

当我这样做时,id 将两个字段都写入 MagnitudeType。我的 _source 看起来像这样我做错了什么?

“_source”:{“MagnitudeType”:{“MagnitudeType”:“MW”,“MagnitudeTypeDesc”:“cok fena zelzele”},“名称”:“can”}

标签: elasticsearch

解决方案


通过模仿这个线程所提倡的,你做的一切都是正确的,即使用enrich处理器将magnitude_type索引中的数据连接到new_index.

现在您只需要使用另一个名为的处理器rename以及remove来自丰富处理器的临时结果对象来展平匹配的幅度对象,如下所示:

PUT /_ingest/pipeline/second_index_lookup
{
 "processors" : [
   {
     "enrich" : {
       "description": "Update data from the second index",
       "policy_name": "second-index-policy",
       "field" : "MagnitudeType",
       "target_field": "tmp"
     }
   },
   {
     "rename": {
       "field": "tmp.MagnitudeType",
       "target_field": "MagnitudeType"
     }
   },
   {
     "rename": {
       "field": "tmp. MagnitudeTypeDesc",
       "target_field": "MagnitudeTypeDesc"
     }
   },
   {
     "remove": {
       "field": "tmp"
     }
   }
 ]
}

之后,您的源代码应如下所示:

{ 
   "MagnitudeType" : "MW", 
   "MagnitudeTypeDesc" : "cok fena zelzele",
   "name" : "can" 
}

推荐阅读