带映射的动态类型

时间:2013-11-22 06:40:19

标签: 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”值的映射来实际设置值的正确类型。

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

我一直试图在网上或书中找到任何内容,但到目前为止还没有。 这甚至可能吗?

1 个答案:

答案 0 :(得分:3)

首先,您需要使用nested类型来确保名称上的查询/过滤器不会与同一文档的其他字段的值混合。

其次,您不能使用相同字段名称的不同类型,在本例中为“value”。因此,您需要稍微更改发送给Elasticsearch的doucments的结构。

当您说“任何类型”时,您是否可以控制类型的数量?如果这样做,您可以执行诸如“date_value”,“location_value”,“float_value”(或类似的)等字段之类的操作。 “string_value”并不是一个好的。它有什么样的分析仪?为其目的命名的类型可能更好,例如“keyword_value”(例如,你可能想要面对的事情),“name_value”(可以有模糊支持),“text_value”(分析正确搜索),等等。

我做了一个可以在这里玩的可运行的例子:https://www.found.no/play/gist/7596633