动态类型与映射

5

我的数据结构非常通用,几乎可以容纳任何类型的数据。

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,类型:浮点数 同时,相同的数据“value”:“哈利波特”,类型:字符串
我已经看到在ES中已经完成了这项工作,但我无法理解如何创建一个实际使用文档中指定的“类型”值来设置正确类型的映射。
对于我来说,指定类型尤其有用,因为我可以在同一数据结构上拥有例如位置类型、日期类型、整数或...。
我一直在寻找在线或书籍上的任何内容,但到目前为止什么都没有。这真的可能吗?
1个回答

3
首先,您需要使用nested类型以确保对名称的查询/过滤不会与同一文档的另一个字段的值混合在一起。
其次,在此情况下,“value”不能有不同的类型。因此,您需要稍微更改发送到Elasticsearch的文档的结构。
当您说“任何类型”时,您是否可以控制类型的数量?如果可以,您可以执行诸如命名为“date_value”,“location_value”,“float_value”(或类似内容)等字段的操作。 "string_value"不是很好。它将具有什么分析器?最好为其目的命名类型,例如“keyword_value”(用于可能要进行聚合的内容),“name_value”(可以具有模糊支持),“text_value”(经过适当搜索分析)等。
我已经创建了一个可运行的示例,您可以在此处使用:https://www.found.no/play/gist/7596633

嗨,Alex,感谢你的努力。在我的示例中,我忘记将对象封装到数组中。如果是数组,是否仍然相同?例如:Document { fields [ {field}, {field} ] } - Reza
我刚刚意识到你确实使用了一个数组 :) 我正在检查它。 - Reza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接