2014-09-06 65 views
0

我有一個包含歌曲集合的mongoDB數據庫。每個文件都包含一個標題,一個藝術家名字和一些其他信息。基於組合值列表的MongoDB/ElasticSearch查詢

我的應用程序允許用戶加載自己的播放列表。基本上,我最終得到一個標題/藝術家名單,並希望與我的數據庫中的相匹配。如果歌曲不在我的數據庫中,我保存它,否則我將它添加到用戶的帳戶。

根據標題和藝術家的價值,搜索所有這些歌曲的最有效方法是什麼?現在我正在循環播放列表中的每首歌曲並在數據庫中搜索它,但這非常耗時。 (可以有數千首歌曲)。

我知道mongoDB有一個$in運營商,但我認爲這不足以解決我的問題。
我也使用ElasticSearch,也許有更好的方法來做我想要的東西。
謝謝。

回答

0

使用ElasticSearch,您可以輕鬆完成此操作。

把你的歌Elasticsearch這樣的:

POST songscollection\data { "artist": "Artist3", "title": "Song1" }

然後創建一個查詢所有歌曲Elasicsearch從播放列表中

POST songscollection\data\_search 
{ 
    "query":{ 
    "bool": { 
    "should" : [ 
      { 
       "bool": { 
       "must": [ 
        { "match" : { "artist" : "Artist1" } }, 
        { "match" : { "title" : "Song1" } } 
       ] 
       } 
      }, 
      { 
       "bool": { 
       "must": [ 
        { "match" : { "artist" : "Artist3" } }, 
        { "match" : { "title" : "Song1" } } 
       ] 
       } 
      } 
     ], 
     "minimum_should_match" : 1 
    } 
    } 
} 

你會得到它存在於數據庫,方便地所有歌曲與代碼中的用戶播放列表映射。