【问题标题】:MongoDB/ElasticSearch Queries based on a list of combinated values基于组合值列表的 MongoDB/ElasticSearch 查询
【发布时间】:2014-10-31 12:18:59
【问题描述】:

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

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

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

我知道 mongoDB 有一个 $in 运算符,但我认为这不足以解决我的问题。
我也在使用 ElasticSearch,也许有更好的方法来做我想做的事。
谢谢。

【问题讨论】:

    标签: mongodb elasticsearch


    【解决方案1】:

    使用 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
        }
      }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2014-03-03
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 2015-01-09
      • 2020-01-27
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多