elasticsearch,Mongodb,elasticsearch" /> elasticsearch,Mongodb,elasticsearch" />

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

基于组合值列表的MongoDB/ElasticSearch查询,mongodb,elasticsearch,Mongodb,elasticsearch,我有一个包含歌曲集的mongoDB数据库。每个文档都包含一个标题、艺术家姓名和一些其他信息 我的应用允许用户加载自己的播放列表。基本上,我最终得到了一个标题/艺术家的列表,并希望将其与数据库中的标题/艺术家进行匹配。如果歌曲不在我的数据库中,我会保存它,否则我会将它添加到用户的帐户中 根据标题和艺术家价值,搜索所有这些歌曲最有效的方法是什么?现在我正在循环列表中的每首歌曲并在数据库中搜索,但这非常耗时。(可能有数千首歌曲) 我知道mongoDB在操作符中有一个$in,但我认为这还不够解决我的问题

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

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

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

我知道mongoDB在操作符中有一个
$in,但我认为这还不够解决我的问题。
我也在使用ElasticSearch,也许有更好的方法来实现我想要的功能。

谢谢。

使用ElasticSearch,您可以轻松做到这一点

将您的歌曲放入Elasticsearch,如下所示:

POST-songscollection\data
{
“艺术家”:“艺术家3”,
“标题”:“歌曲1”
}

然后使用播放列表中的所有歌曲创建一个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
    }
  }
}
您将获得数据库中存在的所有歌曲,并轻松地以代码与用户播放列表进行映射