与ElasticSearch嵌套关系

时间:2015-11-22 04:46:16

标签: elasticsearch

我试图在电影中找到每个演员的收入。这很简单,但这是我现在所拥有的一个例子:

// without actor
{
    "ID": 1,
    "Timestamp": "2014-01-01 00:02:12",
    "Title": "Great White Shark",
    "Amount": 4.99
}

如果我有财务方面的100M条目并且我要求标题= GreatWhiteShark的汇总,那么这不是问题。

然而,当我添加一个Actor时,结构变得非常冗长,并且可能会使我的存储大小增加10倍 -

{
    "ID": 1,
    "Timestamp": "2014-01-01 00:02:12",
    "Title": "Great White Shark",
    "Amount": 4.99,
    "Actors": [Christopher Plummer,Andrew Garfield,Heath Ledger,
               Lily Cole,Jude Law,Verne Troyer,Johnny Depp,
               Tom Waits,George MacKay,Tom Holland,Saoirse Ronan,
               Seymour Cassel,Sofia Milos]
}

这样我可以提出一个问题,例如" 2011年与克里斯托弗·普拉默合影的电影赚了多少钱?"。

有没有更好的方法来完成上述结构?我主要担心的是性能,次要的是存储大小。

1 个答案:

答案 0 :(得分:0)

性能应该非常好,Elasticsearch无论如何都会为actors数组构建一个倒排索引。查询演员将立即返回所有相关电影。

对于空间缩减,您可以尝试将每个actor名称编码为整数id而不是actor slug。但是你应该首先尝试slug变体,因为这不会破坏Kibana等的可读性和集成。

您提出的结构非常适合Elasticsearch。

相关问题