一尘不染

带映射的动态类型

elasticsearch

我的数据结构非常通用。几乎所有类型的数据都适合我的数据结构。

Document{
    "id" : 12345678,
    "fields" : 
        [{
            "name" : "Book title",
            "value" : "Harry Potter",
            "type" : "string"
        },
        {
            "name" : "price",
            "value" : 34.50,
            "type" : "float"
        }]
}

另一个文档可能是这样的:

Document{
    "id" : 123456790,
    "fields" : 
        [{
            "name" : "Blog title",
            "value" : "My awesome blog",
            "type" : "string"
        }]
}

该数据可以更改,并且字段可以具有任何类型和名称。如何动态创建模板映射,以便通过数据中“类型”的值来设置映射的“类型”?例如,值:34.50,类型:在同一时间浮动相同数据“值”:“哈利·波特”,类型:字符串

我已经知道ES中已经做到了这一点,但是我无法做出真正使用文档中指定的“ type”值来实际为该值设置正确类型的映射。

在某种意义上说,指定类型对我特别有用,例如,我可以在同一数据结构上使用位置类型,日期类型,整数或…。

我一直在尝试找到在线或书籍中的任何内容,但到目前为止没有任何内容。这有可能吗?


阅读 197

收藏
2020-06-22

共1个答案

一尘不染

首先,您将要使用嵌套类型来确保名称查询/过滤器未与同一文档的另一个字段的值混合在一起。

其次,您不能具有具有相同字段名称的不同类型,在这种情况下为“值”。因此,您将需要稍微更改发送给Elasticsearch的文档的结构。

当您说“任何类型”时,您是否可以控制类型的数量?如果这样做,您可以做一些事情,例如拥有名为“ date_value”,“ location_value”,“
float_value”(或类似名称)的字段,等等。“
string_value”并不是一个好值。它会有什么分析仪?为它的目的而命名的类型可能会更好,例如,“
keyword_value”(例如,您可能想要了解的内容),“ name_value”(可能具有模糊支持),“
text_value”(已进行分析以进行适当的搜索) ), 等等。

我做了一个可运行的示例,您可以在这里使用:https :
//www.found.no/play/gist/7596633

2020-06-22