2012-02-28 73 views
2

請原諒這個問題的潛在缺陷 - 仍然試圖讓我的頭繞過這個非關係型NoSQL的東西。ElasticSearch映射和相關對象

我對ElasicSearch的性能和簡單性印象非常深刻,但在我深入研究實現之前,我有一個映射(邊界線NoSQL theroy)問題。

讓我們繼續使用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'}} 
}} 

,我想返回與用戶對象作爲響應的一部分匹配的tweet(對具有延遲加載它們更高版本)。

我問得太多了嗎?

如果我想以這種方式查詢數據,我是否應該將所有用戶數據都放入tweet對象中?

在我的實現中(不使用twitter,這只是一個很好的例子)由於我必須查詢數據的各種方式,我需要將這兩個數據集作爲不同的索引,所以我不確定是否我可以使用一個對象類型並具有我需要的索引結構。

在此先感謝您的幫助。

回答

2

ElasticSearch並不真正支持我們在SQL世界中習慣的表連接。最接近它的是Has Child Query,它允許基於另一個表中的記錄的持續性將結果限制在一個表中,甚至在這裏它僅限於一對多(父 - 子)關係。

因此,在這個世界中的一種常見方法是將所有東西非規範化並一次查詢一個索引。

+0

看起來非規範化將成爲我們這裏最可能的結果。 – d2kagw 2012-02-29 01:53:41

+0

d2kagw:你最終做了什麼?我有關於如何存儲帳戶數據與tweets完全相同的問題。 – 2013-10-17 02:45:08