将特定字段(存在于旧索引中)的字符串值转换为数字字段值(在新索引中)时重新索引

时间:2017-03-06 19:28:15

标签: elasticsearch elasticsearch-plugin reindex

我可以问一下,如何在转换'字符串'字段时重新索引,例如“field2”:“123.2”(在旧索引文档中)为浮点数/双数,例如“field2”:123.2(打算在新索引中)?这篇文章是我能得到的最接近的帖子,但我不知道用于将字符串转换/转换为数字的函数。我使用的是ElasticSearch版本2.3.3。非常感谢您的任何建议!

2 个答案:

答案 0 :(得分:0)

使用Elasticsearch templates指定新索引的映射,并将字段指定为double类型。

构建模板的最简单方法是使用现有的映射。

public IActionResult GetUserList()
{
    var UserListVM = new UsetListViewModel()
    {
        UserList = _userManager.Users.OrderBy(u => u.Value).Select(u => new SelectListItem { Value = u.UserName, Text = u.UserName }).ToList()
    };
    return View(UserListVM);
}

然后使用elasticsearch _reindex API将数据从旧索引移动到新索引,并使用内联脚本将该字段解析为double(您可能需要enable inline scripting

GET oldindex/_mapping
POST _template/templatename
{
  "template" : "newindex", // this can be a wildcard pattern to match indexes
  "mappings": { // this is copied from the response of the previous call
    "mytype": {
      "properties": {
        "field2": {
          "type": "double" // change the type
        }
      }
    }
  }
}
POST newindex
GET newindex/_mapping

修改:已更新以使用_reindex端点

答案 1 :(得分:0)

您可以使用Logstash重新索引数据并转换字段。如下所示:

input {
  elasticsearch {
    hosts => "es.server.url"
    index => "old_index"
    query => "*"
    size => 500
    scroll => "5m"
    docinfo => true
  }
}

filter {
  mutate {
    convert => { "fieldname" => "long" }
  }
}

output {
  elasticsearch {
    host => "es.server.url"
    index => "new_index"
    index_type => "%{[@metadata][_type]}"
    document_id => "%{[@metadata][_id]}"
  }
}