gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:24:28 25 4
gpt4 key购买 nike

我试图将先前索引数据中的某些字段从字符串转换为整数。但是,当我再次运行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/

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