elasticsearch - 在Elasticsearch类型中添加字段映射的成本

标签 elasticsearch

我有一个用例,其中有一组预定义的字段,并且还需要支持向ElasticSearch添加动态字段并对其进行一些基本搜索。我可以使用动态模板映射来实现。但是,添加这样的动态场的频率很高。

考虑此ES文档的事件类型:

{
    "name":"Youth Conference",
    "venue":"Ahmedabad",
    "date":"10/01/2015",
    "organizer":"Invincible",
    "extensions":{
        "about": {
            "vision":"Visualizes the image of an ideal Country. ",
            "mission":"Encapsulates the gravity of the top reformative solutions for betterment of Country."
        }
    // Any thing can go here..
    }

}

在上面的示例中,每个事件文档可以具有任何未知/新字段。因此,对于引入的每个此类新动态字段,ES将更新类型的映射。我担心的是在现有类型中添加新字段映射的成本是多少?

我计划通过引入另一种类型来表示所有动态映射(在事件类型内)和事件类型,例如 EventExtensions ,并使用父/子关系将其与事件类型进行映射。我相信这可能会限制向类型中频繁添加动态字段的成本(如果有)。但是,据我所知,使用父子关系将需要更多的内存。

最佳答案

这里要记住的第一件事是字段是按索引而不是按类型的。
因此,无论您在何处添加新字段,都将在同一索引中进行。可以是其他类型,也可以是 parent 或 child 。
因此,将新字段解耦到另一种类型,但是相同的索引不会进行任何更改。

第二场加法不是那么昂贵。我知道人们使用1000个字段并且对此很满意。话虽这么说,应该在字段数上有一个标签,这样它就不会出现疯狂的数字。

这里我们有多种解决问题的方法

1)假设不需要精确搜索新字段数据。在这种情况下,您可以将整个JSON反序列化为字符串并将其添加到字段中。另外,请确保未对该字段进行索引。这样,您可以基于其他字段进行搜索,但是随后在检索文档时,可以获得反序列化的信息。

2)假设新字段如下所示

        {
           "newInfo1" : "log Of Info",
           "newInfo2" : "A lot more info"
        }

代替这个,你可以使用
{
         "newInfo" : [
             {
                "fieldName" : "newInfo1",
                "fieldValue" : "log Of Info"
             },
             {
                "fieldName" : "newInfo2",
                "fieldValue" : "A lot more info"
             }
         ]
    }

这样,字段将不会增加。但是随后要进行特定于字段级别的搜索,例如给我所有具有filedName作为newInfo2的文档,并在其中添加更多单词,则需要将newInfo字段嵌套到中。

希望这可以帮助。

关于elasticsearch - 在Elasticsearch类型中添加字段映射的成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27644821/

相关文章:

search - Elasticsearch copy_to字段更新流程

elasticsearch - 如何在包含太多字段的Elasticsearch中提高索引性能?

elasticsearch - 剥离HTML标签后ElasticSearch突出显示

elasticsearch - 如何查询未分析的字段?

elasticsearch - Elasticsearch:常量数据字段类型

amazon-web-services - 如何获取AWS中Elasticsearch节点的指标?

Elasticsearch 按嵌套字段过滤

rest - 如何通过 REST API 使用 HTTPS 设置 elasticsearch 安全连接

sorting - Elasticsearch按几个字段名称排序

elasticsearch - 如何在不停机的情况下在运行时从 Elasticsearch 集群中删除节点