참고
키워드 검색은 텍스트 검색 또는 전체 텍스트 검색과 동일하지 않으며 형태소 분석 또는 기타 텍스트 처리 기능을 제공하지 않습니다. 자세한 내용은 키워드 인덱스 제한 사항 섹션을 참조하세요.
2.4 에서는 MongoDB 는 텍스트 검색 기능 을 제공합니다. 자세한 내용은 자체 관리 배포서버의 텍스트 인덱스 를 참조하세요.
애플리케이션에서 텍스트를 포함하는 필드의 콘텐츠에 쿼리를 수행해야 하는 경우 텍스트에서 정확히 일치하는 항목을 수행하거나 $regex
을(를) 사용하여 정규 표현식 패턴 일치를 사용할 수 있습니다. 그러나 텍스트의 많은 작업에서 이러한 메서드는 애플리케이션 요구 사항을 충족하지 못합니다.
이 패턴은 텍스트 필드와 동일한 문서의 배열에 저장된 키워드를 사용하는 애플리케이션 검색 기능을 지원하기 위해 MongoDB를 사용하여 키워드 검색을 지원하는 한 가지 방법을 설명합니다. 멀티 키 인덱스와 결합된 이 패턴은 애플리케이션의 키워드 검색 작업을 지원할 수 있습니다.
패턴
키워드 기반 쿼리를 지원하기 위해 문서에 구조를 추가하려면 문서에 배열 필드를 만들고 키워드를 배열에 문자열로 추가합니다. 그런 다음 배열에 멀티 키 인덱스를 생성하고 배열에서 값을 선택하는 쿼리를 만들 수 있습니다.
예시
주제 기반 검색을 제공할 라이브러리 볼륨 컬렉션이 제공됩니다. 각 볼륨에 topics
배열을 추가하고 지정된 볼륨에 필요한 만큼 키워드를 추가합니다.
Moby-Dick
볼륨의 경우 다음 문서가 있을 수 있습니다.
{ title : "Moby-Dick" , author : "Herman Melville" , published : 1851 , ISBN : 0451526996 , topics : [ "whaling" , "allegory" , "revenge" , "American" , "novel" , "nautical" , "voyage" , "Cape Cod" ] }
그런 다음 topics
배열에 멀티 키 인덱스를 만듭니다:
db.volumes.createIndex( { topics: 1 } )
멀티 키 인덱스는 topics
배열의 각 키워드에 별도의 인덱스 항목을 생성합니다. 예를 들어 인덱스에는 whaling
에 대한 항목이 하나 있고 allegory
에 대한 항목이 하나 더 있습니다.
그런 다음 키워드를 기반으로 쿼리합니다. 예시:
db.volumes.findOne( { topics : "voyage" }, { title: 1 } )
참고
수백 또는 수천 개의 키워드가 있는 배열과 같이 많은 수의 요소가 있는 배열은 삽입 시 더 많은 인덱싱 비용이 발생합니다.
키워드 인덱스 제한 사항
MongoDB는 특정 데이터 모델 및 멀티 키 인덱스를 사용한 키워드 검색을 지원할 수 있습니다. 그러나 이러한 키워드 인덱스는 다음과 같은 점에서 전체 텍스트 제품에 미치지 못하거나 비교할 수 없습니다.
형태소 분석 MongoDB의 키워드 쿼리는 루트 또는 관련 단어에 대한 키워드를 구문 분석할 수 없습니다.
동의어 키워드 기반 검색 기능은 애플리케이션 계층에서 동의어 또는 관련 쿼리에 대한 지원을 제공해야 합니다.
랭킹 이 문서에 설명된 키워드 조회는 결과에 가중치를 부여하는 방법을 제공하지 않습니다.
비동기 인덱싱 MongoDB는 인덱스를 동기식으로 구축합니다. 즉, 키워드 인덱스에 사용되는 인덱스는 항상 최신 상태이며 실시간으로 작동할 수 있습니다. 그러나 일부 콘텐츠 및 워크로드에서는 비동기식 벌크 인덱스가 더 효율적일 수 있습니다.