2015-01-02 3 views
1

나는 elasticsearch와 같은 전용 검색 엔진이 지나치게 복잡하고 지원이 복잡 해지는 MongoDB 웹 사이트를 가지고 있으므로 MongoDB 2.6 전체 텍스트 검색을 계속 사용하고자합니다. 보시다시피, MongoDB는 텍스트 검색 색인을 모음 당 one 필드로 제한합니다. 함께 Users 컬렉션이 있고 사용자 이름과 사용자 설명 모두에 대한 전체 텍스트 검색을 사용하려는 경우 올바른 컬렉션 구조는 무엇입니까? 별도의 Text 컬렉션을 만들어 내 웹 사이트의 모든 텍스트 정보를 보관하고 검색에 사용할 컬렉션을 제안 할 수 있습니다. 예를 들어, 사용자는 다음과 같이 삽입됩니다전체 텍스트 검색을위한 올바른 mongodb 수집 구조는 무엇입니까?

users.insert({ 
    name_ref: texts.insert({text: "John Doe", type: USER_NAME}), 
    description_ref: texts.insert({text: "This is a test user", type: USER_DESCR}), 
}); 

이 좋은 해결책인가, 또는 많은 간 수집 의존성이 MongoDB를 죽일 것이다, 나는 다른 appproach을 사용할 필요가?

답변

3

MongoDB는 텍스트 검색 인덱스를 컬렉션 당 하나의 필드로 제한합니다.

여기에 잘못되었습니다. 컬렉션에는 컬렉션 당 인덱스의 텍스트가 하나만있을 수 있습니다. docs 사람 :

모음은 최대 하나의 텍스트 인덱스를 가질 수 있습니다.

인덱스에는 텍스트 검색을 위해 인덱싱 될 필드 인 multiple이 포함될 수 있습니다.

db.collection.ensureIndex({"userName":"text","description":"text"}); 

와 같은 특정 키워드에 대한 검색을 수행하면 인덱스를 만들 수

,

db.collection.find({$text:{$search:"keyword"}}); 

귀하의 컬렉션 자체가 다른 컬렉션에 대한 참조없이, 포함 할 수있다.

{ 
    userName:"John Doe", 
    description:"This is a test user" 
} 
+0

놀라운 답변과 새해 복 많이 받으셔서 감사합니다. – grigoryvp

+0

당신을 가장 환영합니다. 새해 복 많이 받으셔도 좋습니다 ;-) – BatScream

관련 문제