问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

elasticsearch 数据更新会立刻生效吗

发布网友 发布时间:2022-04-27 00:36

我来回答

1个回答

热心网友 时间:2022-05-02 23:27

Elasticsearch的mapping一旦创建,只能增加字段,而不能修改已经mapping的字段。但现实往往并非如此啊,有时增加一个字段,就好像打了一个补丁,一个可以,但是越补越多,最后自己都觉得惨不忍睹了。怎么办??
这里有一个方法修改mapping,那就是重新建立一个index,然后创建一个新的mapping。你可能会问,这要是在生产环境,可行吗?答案是,如果你一开始就采取了合适的设计,这个完全是可以做到平滑过渡的。
采取什么合理设计呢?就是我们的程序访问索引库时,始终使用同义词来访问,而不要使用真正的indexName。在reindex完数据之后,修改之前的同义词即可。明白了吗?
参考上面的思路,我们来一步一步做。
step1、创建一个索引,这个索引的名称最好带上版本号,比如my_index_v1,my_index_v2等。
step2、创建一个指向本索引的同义词。
curl -XPOST localhost:9200/_aliases -d '
{
"actions": [
{ "add": {
"alias": "my_index",
"index": "my_index_v1"
}}
]
}
'

此时,你可以通过同义词my_index访问。包括创建索引,删除索引等。
step3,需求来了,需要更改mapping了,此时,你需要创建一个新的索引,比如名称叫my_index_v2(版本升级).,在这个索引里面创建你新的mapping结构。然后,将新的数据刷入新的index里面。在刷数据的过程中,你可能想到直接从老的index中取出数据,然后更改一下格式即可。如何遍历所有的老的index数据,请参考 这里 。
step4,修改同义词。将指向v1的同义词,修改为指向v2。http接口如下:
curl -XPOST localhost:9200/_aliases -d '
{
"actions": [
{ "remove": {
"alias": "my_index",
"index": "my_index_v1"
}},
{ "add": {
"alias": "my_index",
"index": "my_index_v2"
}}
]
}
'

step5,删除老的索引。
curl -XDELETE localhost:9200/my_index_v1

除此之外,还有几个其他的方法也可以更改mapping。
1、修改程序,添加字段。
就是说,你可以在mapping中增加一个新的字段,然后你对新的字段进行访问统计搜索。这个就要修改两个地方,一个是修改mapping增加字段,还有就是修改你的程序,把字段改成新的字段。
2、更改字段类型为multi_field。
multi_field允许为一个字段设置多个数据类型。应用multi_field的一个最典型的场景是:一个类型定义为analyed,这个字段可以被搜索到,一个类型定义为不分词,这个字段用于排序。
任何字段都可以被更新为multi_field(类型为object和nested的类型除外)。假设现在有一个字段,名字叫created,类型现在为string。
{ "created": { "type": "string"} }

我们可以将它增加一种类型,使他既能被当做字符串又能当做日期型。
curl -XPUT localhost:9200/my_index/my_type/_mapping -d '
{
"my_type": {
"properties": {
"created": {
"type": "multi_field",
"fields": {
"created": { "type": "string" },
"date": { "type": "date" }
}
}
}
}
}
'

采用标准的重建索引方式的时候,我们推荐大家为每一个type都建立一个索引同义词,即便在同一个索引库中的多个type,也推荐使用建立一个同义词来访问。即一个index里面包含一个type,因为在elasticsearch中,跨index查询数据是很方便的。这样,我们就可以在reindex一个type后,立即将type生效,而不是将index下面所有的type都重建完后,同义词才能生效。
对这类话题感兴趣?欢迎发送邮件至 donlianli@126.com
关于我:邯郸人,擅长Java,Javascript,Extjs,oracle sql。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
三星8英寸平板电脑三星8英寸平板电脑哪个型号好 长城第一墩文化景区-讨赖河吊桥地址在哪里? 珲春景点简介 夏季需要加防冻液吗? 抽血感染艾滋病的概率 清洁剂的作用有哪些 日化产品抗菌抑菌效果怎样 杠杆高低有什么区别 姓赵取什么名字好 赵姓男孩女孩取名字大全 赵姓好听顺口的女孩名字女孩姓赵有气质名字 elasticsearch 怎么更新数据的 如何把数据快速批量添加到Elasticsearch中 elasticsearch2.4删掉deletebyquery了吗 ElasticSearch docs数据每天都在减少。请问是怎么回事? 如何修改elasticsearch数据 Elasticsearch 怎么根据条件删除数据 如何调用elasticsearch中的数据 elk怎么恢复被删数据 elasticsearch bulk提交之后需要清空吗需要 Elasticsearch中refresh和flush的区别是什么 elasticsearch索引量大怎么定时删除 怎么删除elasticsearch数据 elasticsearch 数据怎么删除 填写《全国工业产品生产许可证申请书》,要求提交法人承诺 ,请问法人承诺怎么写? 我想玩个游戏但是 显卡驱动等级太低了··请问这到哪升级? ATI显卡驱动版本过低需要更新.但无法更新。怎么办? 显卡驱动版本较低怎么更新 企业贷款承诺申请书样本 显卡驱动版本低 怎么整啊 版本太低,请先更新显卡驱动,怎么回事 关于elasticsearch 查询数据问题 Elasticsearch到底能玩多大的数据量 ...底纹填充:橙色,强调文字颜色6,淡色80%;在哪里做啊 word2010版计算机一级考题给自然段添加“橙色、强调文字颜色6,深色25%,3号”的阴影边框 为什么找不到? WORD艺术字怎么设置强调文字颜色? QQ炫舞的身份证号码可以换不? 怎么换? qq炫舞手游可以换绑吗 qq炫舞手游可以换绑吗? 谁知道知道怎么修改QQ炫舞已经绑定的身份证要怎么修改啊? QQ炫舞怎么重新设置身份证? QQ炫舞如何修改防沉迷身份证号码? 省团委青工部长是什么级别? 湖南省共青团组织部部长 冯子龙现任职务 共青团贵州省委宣传部部长是正县级吗 共青团省委书记是什么级别? 杜珂,安徽省团省委志工部部长 刘铁铎的履历 垃圾车等专用车辆需要缴纳购置税吗 侯明的履历 垃圾车免征购置税