Elasticsearch类型与具有不同模式的索引

时间:2016-10-14 07:26:27

标签: elasticsearch

https://www.elastic.co/blog/index-vs-type

什么是类型?

  

字段需要在不同类型之间保持一致。例如,如果两个字段在同一索引的不同类型中具有相同的名称,则它们必须具有相同的字段类型(字符串,日期等)并具有相同的配置。

并且“我应该使用哪一个”

  

您的文档是否有类似的映射?如果不是,请使用不同的索引。

但是,在https://www.elastic.co/guide/en/elasticsearch/guide/current/parent-child.html中,它提到我们需要将父子文档放在同一个索引中。但是,亲子多久有相似的映射? 和

我想要调查的是,我是否应该将我的2个不同文档放在同一个索引中,这样我就可以进行亲子搜索。

但我从索引vs类型中理解的是,具有不同模式的文档实际上应该放在不同的索引中,但是如何将父子关系工作?

2 个答案:

答案 0 :(得分:2)

通过"类似的映射",它们只是意味着具有相同名称但在两种不同映射类型中的字段必须具有相同的数据类型。

拥有不同的父和子映射类型是完全可以的,唯一的限制是这两个映射不能包含具有相同名称但不同数据类型的字段。

例如,如果父映射具有类型为age的名为int的字段,则子映射类型不能具有类型为age的{​​{1}}字段或{ {1}}

答案 1 :(得分:1)

当您使用类似索引和不同类型时,问题是具有不同类型的相同字段。要处理此问题,您可以为这些字段使用前缀。例如:

scoreuser类型有company字段。其中一个是integer,其中一个是string。您应该为这些分数字段指定不同的名称。

POST main_index/user/_mapping
{
    "properties": {
        ....
        "user_score": {
            "type": "integer"
        }
    }
}

POST main_index/company/_mapping
{
    "properties": {
        ....
        "company_score": {
            "type": "string"
        }
    }
}

您需要在所有相同的命名字段中执行相同的操作。