映射更改 - 数据丢失了吗?

时间:2016-07-01 19:31:20

标签: elasticsearch

我的队友已经改变了映射的定义,因为我们在排序时没有memmory错误,没有排序的搜索工作正常。他在某处读到这可能是doc_values设置的问题。不幸的是,没有阅读任何其他关于映射的文档。我们有1个索引和2种类型的映射。两个映射中的耦合字段具有相同的名称。我们的数据结构和更改可以通过架构来解释:

改变之前:

type A: {
    properties: {
        aaa: { type: string, store: true }
        bbb: { type: long, store: true }
        ccc: { type: long, store: true }
    }
},
type B: {
    properties: {
        aaa: { type: string, store: true }
        bbb: { type: long, store: true }
        xxx: { type: long, store: true }
    }
}

更改后:

type A: {
    properties: {
        aaa: { type: string, store: true,
            fields: {
                raw: { type: string, index: not_analyzed, doc_values: true }
            }
        }
        bbb: { type: long, store: true, doc_values: true }
        ccc: { type: long, store: true, doc_values: true }
    }
},
type B: {
    properties: {
        aaa: { type: string, store: true }
        bbb: { type: long, store: true }
        xxx: { type: long, store: true }
    }
}

所以他添加了doc_values并将两种类型中存在的一个字段更改为多字段,但他只更改了一种类型的映射。

文档说明:

  1. 除非您准备重新索引所有数据,否则禁止更改现有字段的映射,但在我读过的其他文章中(changing-mapping-with-zero-downtime),有一个例外:将字段升级到多字段。
  2. 在相同索引中具有相同名称的不同类型的字段是共享的,并且必须具有相同的映射。
  3. 默认情况下,所有支持doc_values的字段都已启用。几乎所有字段类型都支持Doc值,但已分析的字符串字段除外。
  4. 毕竟我不确定我们结束了什么。我知道typeA变得不可用,所有查询都没有给我们带来任何结果。但是typeB仍然可以正常工作。

    明确定义'doc_type:true'真的是现有字段的禁止更改(如果字段将此设置设为默认值)?

    是否将已分析的字符串字段转换为多字段,并将doc_values的行为从不受支持更改为true(因为子字段未被分析)是否禁止更改现有字段?

    索引是否永久损坏或更改是否可以撤消。怎么样?通过将typeA更改为以前的设置(我不确定是否有帮助或破坏索引,如果它尚未销毁)或通过将typeB更改为适合typeA。我不想改变任何像我的队友那样粗心的东西,因为重新索引6百万份文件不是我喜欢的选项......

0 个答案:

没有答案