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