2011-03-08 23 views
2

怎麼辦子選擇在CouchDB中,或者,如何使用group_level如何使用group_level匹配一個超集關鍵的一個子集(在CouchDB中的子選擇?)

匹配一個超集關鍵是一個子集,我有一個漂亮的複雜的問題,希望有一個不太複雜的答案,不僅僅是第一次學習map/reduce和couchdb的人。

我正在研究一個爲客戶端提供json清單的系統,以便每天更新內容來配置自己。在第一次運行時,客戶端使用一些描述性標籤(例如屏幕大小,操作系統,位置)註冊自己,然後服務器返回一個group_id。客戶端每天都使用該ID來請求其清單。在後端,我們任意將客戶端分組在一起,共享某些標籤以減少我們需要存儲/服務的唯一清單的數量。

我們的銷售/管理員擁有一個web應用程序,他可以在其中設置受衆羣體以在特定的羣組中定位特定內容。觀衆可以重疊多個組。訣竅是,當客戶報到以獲得新的清單時,我們需要確定哪些受衆最適合該客戶的小組。最佳匹配觀衆將首次觀衆誰的標籤是提交羣體標籤的子集,例如:

 
audience1: tagA, tagB, tagC, tagD 
audience2: tagA, tagC 

group1: tagA, tagB, tagC 

這個小組應該與audience2,不audience1。

如果我們使用一衆標籤找到最好的小組賽(換句話說,如果group.tags是audience.tags的一個子集),我可以建立一個真正effecient指數像這樣:

 
[tagA, tagB, tagC], group1._id 
[tagA, tagC, tagB], group1._id 
[tagB, tagA, tagC], group1._id 
[tagB, tagC, tagA], group1._id 
[tagC, tagA, tagB], group1._id 
[tagC, tagB, tagA], group1._id 

並使用group_level = 2與key = [tagA,tagC]來匹配audience2與索引中的第二行。問題是,我不知道如何去做另一個方向:將group.tags與audience.tags的索引進行匹配,在查詢時我們知道的標籤(group.tags)是一個超集標籤我們試圖匹配(audience.tags)

我已經牢牢抓住了簡單的m/r視圖,但我一直在這個死衚衕。我所接觸的每個解決方案都涉及在我的視圖函數中做某種子選擇,這在couchdb視圖中不起作用......關於如何攻擊這樣的問題的任何想法?

希望這種描述是有道理的。

回答

2

我能想到的最簡單的解決方案是:

這些鍵是所有可能的鍵,按重要性相反的順序排列(按指定鍵的順序返回行)。鍵中的標記也是排序的。

在你的榜樣鍵可以是:

[tagA, tagB, tagC] 
[tagB, tagC] 
[tagA, tagC] 
[tagA, tagB] 
[tagC] 
[tagB] 
[tagA] 

的第一個結果是你想要的,所以你可以使用限制= 1。

+0

是的,我認爲這樣做。我昨天發現了多鍵發佈,並認爲有可能會揭示解決方案,謝謝。 – vitriolix 2011-03-10 19:22:50

相關問題