2011-01-11 92 views
1

我有以下語法數據庫:查找一組屬性之間的最相似(MongoDB的)

{_id:'342', values:{ A: '432', B: 'asdf', C: '23', D: 'gg'}} 
{_id:'343', values:{ A: 's', B: 'fsd', C: 'as', D: '4'}} 
{_id:'344', values:{ A: 'f', B: 'f', C: 'af', D: '32'}} 
{_id:'345', values:{ A: 'f', B: 'f', C: '333', D: 'adf'}} 

給定一組爲A,B,C,d值的 - 我想找到具有最相似之處的文件。

例如由於它具有A,B和C,所以它將匹配_id:345。{}匹配。

我想獲得與我所擁有的值最相似的結果。

是否有一個查詢/算法可以實現這個快速?

注意:不知道如何標題,如果你有更好的標題可以自由編輯它。

+0

而且它真的在Db中嗎?還是可以將它加載到內存中? – 2011-01-11 22:22:53

回答

0

這裏是你可以做的一種方式,假設你想在親近匹配的順序結果,並假設有隻4(所以這是可行的,做的所有排列):

使用$ elemMatch(見http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24elemMatch )反覆。

首先查詢所有4個值(1個查詢)。
如果失敗查詢每個組合的3個值(4個查詢)。
如果失敗查詢每個組合的2個值(6個查詢)。
如果只有一個匹配(4個查詢)的查詢失敗。

另一種方法是使用map reduce。在map函數中計算某一行的分數,如果分數> 0,則將文檔ID作爲關鍵字,將得分作爲該值。在減少階段通過單一的結果沒有任何工作。按分數排序結果。

相關問題