ElasticSearch Mappings&相关对象

时间:2012-02-28 07:38:45

标签: lucene nosql elasticsearch

请原谅这个问题的潜在缺点 - 仍然试图了解这个非关系型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,这只是一个优雅的例子)我需要将两个数据集作为不同的索引,因为我有各种方法来查询数据,所以我不确定我是否可以使用对象类型并具有我需要的索引结构。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

ElasticSearch并不真正支持我们在SQL世界中习惯的表连接。最接近它的是Has Child Query,它允许根据另一个表中记录的持久性将结果限制在一个表中,甚至在这里它限制为1对多(父子)关系。

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