2012-03-09 2 views
3

문자열 값에 일련의 단어 또는 구가 포함되어있는 mongodb 항목을 선택하는 가장 좋은 전략은 무엇입니까? 나는 mysql의 LIKE 함수와 같은 것을 생각하고있다.MongoDB - 텍스트 검색

WHERE (TEXT LIKE "% apple %") or (TEXT LIKE "% banana %") 

나는 문자열을 토큰 화 포함 옵션을 본 적이 있지만이 더 거대 할 것이다, 모든 텍스트에 대한 건물 unigrams을 포함까요?

답변

3

MongoDB를 지금에는 전체 텍스트 검색 기능이 없지만, 간단합니다 SOLR과 같은 외부 검색 엔진을 사용합니다.

Regex 나 단어 형태소 분석 등으로 ​​텍스트 검색을 재구성하는 것이 좋습니다. 앱 자체 기능에 초점을 맞추어야합니다.

Mongoid, SunspotMongoid-Sunspot이 조합을 사용하고 있습니다. 프로덕션 환경에서 매우 잘 작동하며 개발 설정이 쉽습니다.

+0

+1 -이 또한 투표를하는 것이 좋습니다 (이미 2 번이지만 모든 표가 도움이됩니다) : https://jira.mongodb.org/browse/SERVER-380 –

1

MongoDB 쿼리에서 정규식 지원을 사용할 수 있습니다. 다음 링크 @ 가능합니다 자세한 내용은

http://docs.mongodb.org/manual/reference/operator/regex/

여기 두 가지 예해야 미래에 다시 위의 링크 이동 :

db.collection.find({ field: /acme.*corp/i }); 
db.collection.find({ field: { $regex: 'acme.*corp', $options: 'i' } }); 
0

어떻게 든 MongoDB를 내장 텍스트 검색이 실패 검색 그런 다음 컬렉션 에 인덱스를 사용 을 사용할 시작 꽤 긍정적이다 복합 색인을 사용하는 기존 데이터베이스에 대한 필자의 요구 사항을 충족시킬 수 있습니다. 지금은 mongoose-search-plugin을 사용하고 있으며 잘 작동하고 있습니다. 자연스러운 형태소 분석과 거리 알고리즘을 사용하여 관련성 점수를 반환합니다.

User.search('Malaysia Car Food',{username:1},{}, function(err, u){ 
    console.log('Search Results: '+JSON.stringify(u)); 
});