gpt4 book ai didi

elasticsearch - ElasticSearch:如何使用现有数据将字段移到另一个级别?

转载 作者:行者123 更新时间:2023-12-03 00:38:59 28 4
gpt4 key购买 nike

说我有:

PUT /test/_doc/1
{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elasticsearch",
"data": {
"modified_date": "2018-11-15T14:12:12",
"password": "abcpassword"
}
}

然后我得到以下映射:
GET /test/_mapping/_doc
{
"test": {
"mappings": {
"_doc": {
"properties": {
"data": {
"properties": {
"modfied_date": {
"type": "date"
},
"password": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"message": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"post_date": {
"type": "date"
},
"user": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}

如何重新映射映射,以使 modified_dateuser处于同一级别并且不丢失任何数据?
{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elasticsearch",
"modified_date": "2018-11-15T14:12:12"
"data": {
"password": "abcpassword"
}
}

最佳答案

我建议使用Ingest NodePipelines。您可以在分别添加的链接中了解它们。

基本上,我将要做的是构造一个pipeline并在indexingreindexing过程中提及它,以便在文档实际存储在目标索引中之前,文档将按照管道中的定义进行预处理。

我已经为您的用例创建了下面的管道。它的作用是,添加一个具有所需值的新字段modified_date,并删除了字段data.modified_date。如果其中未提及任何字段,则将不会对其进行修改,并且会将其原样吸收到目标索引中。

创建/添加管道

PUT _ingest/pipeline/mydatepipeline
{
"description" : "modified date pipeline",
"processors" : [
{
"set" : {
"field": "modified_date",
"value": "{{data.modified_date}}"
}
},
{
"remove": {
"field": "data.modified_date"
}
}
]
}

创建完上述管线后,请利用它执行重新索引。

用法1:在重新索引到新索引期间
POST _reindex
{
"source": {
"index": "test"
},
"dest": {
"index": "test_dest",
"pipeline": "mydatepipeline"
}
}

这些文档将按照您的期望进行转换,并在 test_dest索引中进行索引。请注意,您需要根据需要使用映射详细信息显式创建 test_dest

用法2:在索引建立之前的批量操作期间使用管道

您可以在批量操作期间按如下方式使用它:
POST _bulk?pipeline=mydatepipeline

用法3:在建立索引期间在单个文档上使用管道
PUT test/_doc/1?pipeline=mydatepipeline
{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elasticsearch",
"data": {
"modified_date": "2018-11-15T14:12:12",
"password": "abcpassword"
}
}

对于 Usage 2 and 3,您都需要确保相应地创建了映射。

希望这可以帮助!

关于elasticsearch - ElasticSearch:如何使用现有数据将字段移到另一个级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53215707/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com