arrays - ElasticSearch:嵌套数组与单独类型

标签 arrays types elasticsearch

我将ElasticSearch用作数据存储,并且想知道如何构造数据。来自MySQL,我的自然本能是将所有内容分成不同的类型(“表”),但是我不确定是否可以从中获得任何好处。

例如,我有一篇带有评论的文章,​​我想跟踪单击评论中“喜欢”的用户。我应该只是将用户ID数组保留在文章注释中的嵌套数组中,还是应该将注释移到单独的comment类型中?那么,那些喜欢该评论的用户又该如何呢?

{
    "article": {
        "properties": {
            ...
            "comments": {
                "properties": {
                    ...
                    "likes": { "type": "string" } // array of UUIDs
                }
            }
}

从效率的 Angular 来看,在嵌套数组中使用嵌套数组是否存在问题?在将ElasticSearch用作数据存储时,使用嵌套数组/对象或单独的类型更好吗?

最佳答案

这是一个广泛的问题,通常的答案是“取决于情况”。我要说的是,在规划数据的结构时,需要考虑两个主要方面。

一种是您的访问模式-您将需要什么类型的搜索,以及您希望对数据进行什么样的聚合(如果有)。尝试对您的用途进行映射,以确保您可以根据自己的构想实现它。

第二个是更新模式。在某种程度上,这被访问模式所忽略,但是有一些重要的含义值得考虑。例如,如果文章本身变化不大,但可以包含很多注释,则由于无需在每个注释上重新索引文章,因此将注释作为单独的文档(和类型)保存可能会获得更好的性能。 (请记住,在Elasticsearch中更新文档实际上是对其重新编制索引)。

我还建议您阅读http://www.elasticsearch.org/blog/managing-relations-inside-elasticsearch/这篇文章,并熟悉嵌套对象和父子类型之间的区别(当父子的更新模式不同时,后者会更好)。

关于arrays - ElasticSearch:嵌套数组与单独类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23219066/

相关文章:

c - 无法在 C 中打印 float64 值

java - _version、_id 等的 spring-data-elasticsearch 元数据注释

.net - Elasticsearch .net NEST - DeleteByQuery 不起作用但搜索相同的查询有效

python - numpy矢量化方法来计算整数数组中的非零位

java - 在java中将ArrayList转换为Array

具有模板成员变量的 C++ 类

scala - 利用 Scala 匹配表达式中案例类的类型约束

laravel - 无法连接到GetCandy内的ElasticSearch

java - ArrayList 上加载对象的错误逻辑(该列表有多个具有相同数据的对象)

PHP - 相当于 array_slice() 的对象;