elasticsearch 为什么';elasticsearch是否允许更改索引数据?,elasticsearch,logstash,kibana,elasticsearch,Logstash,Kibana" /> elasticsearch 为什么';elasticsearch是否允许更改索引数据?,elasticsearch,logstash,kibana,elasticsearch,Logstash,Kibana" />

elasticsearch 为什么';elasticsearch是否允许更改索引数据?

elasticsearch 为什么';elasticsearch是否允许更改索引数据?,elasticsearch,logstash,kibana,elasticsearch,Logstash,Kibana,我试图将以前索引的数据中的一些字段从字符串转换为整数。但是当我再次运行logstash时,字段没有被转换(仅在Kibana中签入)。为什么我不能对已经索引的数据进行更改?如果不能,我如何对索引进行所需的更改 我只是在日志库里做些改变。下面是一段logstash.conf: input { file { type => "movie" path => "C:/TestLogs/Test5.txt" start_position => "beginn

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

我只是在日志库里做些改变。下面是一段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"}
        }
}
输入{
文件{
类型=>“电影”
path=>“C:/TestLogs/Test5.txt”
开始位置=>“开始”
}
}
滤器{
格罗克{
匹配=>{“消息”=>“(?[\w.\-\']*)\s(?[\d.]+)\s(?\d+)\s(?\d+)\s(?\d+)”
}
变异{
转换=>{“评级”=>“浮动”}
convert=>{“下载次数”=>“整数”}
convert=>{“视图数”=>“整数”}
}
}

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

如果要更改映射,即数据结构,则必须使用新映射创建新索引并将其存储在那里

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

如果您想使其对从elasticsearch读取的应用程序透明,可以使用别名:

首先,索引名是
data\u v1
,别名是
data

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

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

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

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

可以更清楚地表明,更新文档是完全可以的,但是映射不需要重新索引就不能更改。@paweloque:所以如果我在logstash.conf中进行更改,我可以通过elasticsearch进行映射,最后这些更改将反映在kibana中?@kaks您的logstash.conf看起来怎么样?如果在那里更改,可能必须删除索引,设置新映射,然后重新索引数据。@Paveloque:请检查我编辑的问题。我已经包含了logstash.conf文件的一部分。我添加了一个别名来指向我现有的索引
PUT/movie1\u indexer/\u alias/mov1
如何使用sense插件使别名
mov1
指向新索引,以便删除旧索引?