2014-10-20 5 views
2

MongoDB에서 검색을 구현해야한다고 상상해보십시오. 당신은 다음과 같이 문서의 컬렉션이 있습니다 :MongoDB에서 검색

{text: "This is some Text } 
{text: "this is another text hehe"} 

지금 당신이 검색어를 포함하는 모든 문서를 반환 소문자를 구분 검색을 구현하려는. 예를 들어 "text"를 검색하면 두 문서가 모두 반환됩니다. "hehe"를 검색하면 두 번째 문서 만 반환됩니다.

난 당신이 같은이 사용 $ 정규식을 수행 할 수 있습니다 알고

SEARCH_TERM 우리가 찾고있는 용어입니다
db.comments.find({text: {$regex: /.*SEARCH_TERM.*/i}}); 

.

regex를 통한 검색이 좋지 않은 것 같아서 더 좋은 방법이 있는지 궁금합니다. 색인 생성 또는 이와 같은 방법이 없습니다. 이러한 배열 한 후 인덱스를

{text: ["This", "is", "some", "Text"]} 
{text: ["this", "is", "another", "text", "hehe"]} 

과 :

내 생각은 어떻게 든 문서에서 텍스트를 토큰 화 할 수 있으므로이 같은 문서를했을 것입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

답변

1

는지도가 감소 할 재미있을 수 있음 :

mapper=function(){ 
    var words=this.text.match(/\S+\s*/g); 
    for (w in words){ 
     emit(this._id, {'words':words}) 
    } 
} 

reducer=function(k,v){return {'words':this[0].words}} 

이 당신에게 단어와 함께 컬렉션을 받아야 분리를. 아마도 집계를 사용하여이를 수행하는 방법이있을 것입니다.

관련 문제