【问题标题】:ElasticSearch Mappings & Related ObjectsElasticSearch 映射和相关对象
【发布时间】:2012-03-17 16:44:22
【问题描述】:

请原谅这个问题的潜在问题 - 仍然试图让我的头脑了解这些非关系型 NoSQL 的东西。

ElasicSearch 的性能和简单性给我留下了深刻的印象,但在我深入研究实现之前,我有一个映射(边缘 NoSQL 理论)问题要回答。

让我们继续使用 ElasticSearch 在其文档中的 Twitter 示例。

基本上,我们知道一条推文属于一个用户,而一个用户有很多条推文。 对象看起来像这样:

user  = {'screen_name':'d2kagw', 'id_str':'1234567890', 'favourites_count':'15', ...}
tweet = {'message':'lorem lipsum...', 'user_id_str':'1234567890', ...}

我想知道的是,推文对象可以引用用户对象吗? 因为我希望能够编写如下查询:

{'query': {
  'term':{'message':'lipsum'},
  'range':{'user.favourites_count':{'from':10, 'to':30'}}
}}

我想返回与用户对象匹配的推文作为响应的一部分(而不是稍后延迟加载它们)。

我是不是要求太多了?

如果我想以这种方式查询数据,是否应该将所有用户数据放入推文对象中?

在我的实现中(不使用 twitter,这只是一个优雅的示例)由于我必须以各种方式查询数据,因此我需要将两个数据集作为不同的索引,所以我不确定我是否可以使用对象类型并具有我需要的索引结构。

提前感谢您的帮助。

【问题讨论】:

    标签: lucene nosql elasticsearch


    【解决方案1】:

    ElasticSearch 并不真正支持我们在 SQL 世界中如此习惯的表连接。最接近它的是Has Child Query,它允许根据另一个表中记录的存在来限制一个表中的结果,即使在这里它也仅限于一对多(父子)关系。

    因此,这个世界上的一种常见方法是对所有内容进行非规范化并一次查询一个索引。

    【讨论】:

    • 看起来非规范化将是我们这里最有可能的结果。
    • d2kagw:你最后做了什么?关于如何存储帐户数据与推文,我有完全相同的问题。
    猜你喜欢
    • 2012-07-11
    • 2014-06-17
    • 2014-12-25
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 2017-04-11
    • 2011-04-24
    相关资源
    最近更新 更多