elasticsearch - 为什么elasticsearch不允许更改索引数据?

标签 elasticsearch logstash kibana

我尝试将先前索引数据中的一些字段从字符串转换为整数。但是当我再次运行logstash时,字段没有转换(仅在Kibana中检查)。为什么我不能对已索引的数据进行更改,如果不能,如何对索引进行所需的更改?

我只在logstash 中进行了更改。这是一段logstash.conf:

input {
  file {
    type => "movie"
    path => "C:/TestLogs/Test5.txt"  
    start_position => "beginning"
  }
}

filter {
    grok {
            match => {"message" => "(?<Movie_Name>[\w.\-\']*)\s(?<Rating>[\d.]+)\s(?<No. Of Downloads>\d+)\s(?<No. of views>\d+)" }
        }
    mutate {
        convert => {"Rating" => "float"}
        convert => {"No. of Downloads" => "integer"}
        convert => {"No. of views" => "integer"}
        }
}

最佳答案

Elasticsearch 使用 Lucene 作为其核心来索引和存储数据。 Lucene 使用只读数据结构来存储数据,这就是为什么无法更改已存储在 elasticsearch 中的数据的数据结构的原因。可以使用新值更新文档,但不能更改整个索引的结构。

如果您想更改映射,即数据结构,那么您必须使用新映射创建一个新索引并将其存储在那里。

如果elasticsearch是数据的主人,这当然不是那么容易。为此,您必须使用新映射创建一个新索引,并从旧索引中读取数据并将其放入新索引中。您可以使用 Scan and Scroll 来完成此操作方法。

如果您想让应用程序从elasticsearch读取数据透明,您可以使用别名:

首先索引名称为data_v1,别名为data:

data -> data_v1

然后使用新映射创建一个新索引:data_v2。从 data_v1 读取所有数据并将其存储在 data_v2 中。完成此操作后,将别名更改为指向 data_v2

data -> data_v2

要更改别名,您可以使用“删除”和“添加”功能:

POST /_aliases
{
    "actions": [
        { "remove": {
            "alias": "items",
            "index": "items_v1"
        }}
    ]
}

POST /_aliases
{
    "actions": [
        { "add": {
            "alias": "items",
            "index": "items_v2"
        }}
    ]
}

关于elasticsearch - 为什么elasticsearch不允许更改索引数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33804418/

相关文章:

elasticsearch - Logstash conf文件不起作用,语法有什么问题?

logging - Kibana 拆分 URL

elasticsearch - Cassandra:无法在特定键空间上达到一致性级别QUORUM

elasticsearch - Elasticsearch:如何在日期范围之间的URL查询中获取每天大小的store.size和pri.store.size

php - Elasticsearch 模糊匹配,精确匹配最先显示

elasticsearch - Elasticsearch 查询增加30天的属性值

postgresql - logstash 连接到数据库问题

elasticsearch - 使用 Elasticsearch 的关键字搜索

elasticsearch - logstash示例插件不起作用

elasticsearch - 有没有办法我可以解析特定字段以在kibana中进行可视化