2014-09-06 3 views
0

노래 컬렉션이있는 mongoDB 데이터베이스가 있습니다. 각 문서에는 제목, 아티스트 이름 및 기타 정보가 들어 있습니다.MongoDB/ElasticSearch 조합 된 값 목록을 기반으로 한 쿼리

내 앱을 사용하면 사용자가 자신의 재생 목록을로드 할 수 있습니다. 기본적으로 제목/아티스트 목록으로 끝나고 내 데이터베이스의 제목/아티스트와 일치시키고 싶습니다. 노래가 내 데이터베이스에 없으면 저장하고, 그렇지 않으면 사용자 계정에 추가합니다.

제목과 아티스트의 가치를 기반으로 모든 노래를 검색하는 가장 효율적인 방법은 무엇입니까? 지금은 목록의 각 노래를 반복 재생하고 데이터베이스에서 검색하지만 시간이 많이 걸립니다. (수천 곡이있을 수 있습니다.)

나는 mongoDB가 $in 연산자를 가지고 있지만 그것이 내 문제에 대해 충분하다고 생각하지 않는다는 것을 알고있다.
저는 ElasticSearch도 사용하고 있습니다. 아마도 내가 원하는대로 할 수있는 더 좋은 방법이있을 것입니다.
감사합니다.

답변

0

ElasticSearch를 사용하면 쉽게이 작업을 수행 할 수 있습니다.

은 다음과 같이 Elasticsearch하는 노래를 넣어 :

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

그런 다음 당신은 쉽게 DB와에 존재하는 모든 노래를 얻을 것이다 재생 목록

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

에서 모든 노래와 Elasicsearch 하나 개 쿼리를 만들 코드에서 사용자 재생 목록과 매핑합니다.

관련 문제