MongoDB / ElasticSearch基于组合值列表的查询

时间:2014-09-06 20:50:28

标签: mongodb elasticsearch

我有一个包含歌曲集的mongoDB数据库。每个文档都包含标题,艺术家姓名和其他一些信息。

我的应用允许用户加载自己的播放列表。基本上我最终得到一个标题/艺术家列表,并希望将其与我的数据库中的那些匹配。如果歌曲不在我的数据库中,我会将其保存,否则我会将其添加到用户的帐户中。

根据标题和艺术家价值搜索所有这些歌曲的最有效方法是什么?现在我循环播放列表中的每首歌曲并在数据库中搜索它,但这非常耗时。 (可能有数千首歌曲。)

我知道mongoDB有一个$in运营商,但我认为这不足以解决我的问题。
我也使用ElasticSearch,也许有更好的方法来做我想要的东西。
感谢。

1 个答案:

答案 0 :(得分: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
    }
  }
}

您将获得数据库中存在的所有歌曲,并在代码中轻松映射用户播放列表。

相关问题