키워드 검색을 지원하는 모델 데이터
이 페이지의 내용
참고
키워드 검색은 텍스트 검색 또는 전체 텍스트 검색과 동일하지 않으며 형태소 분석 또는 기타 텍스트 처리 기능을 제공하지 않습니다. 자세한 내용은 키워드 인덱스 제한 사항 섹션을 참조하세요.
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는 인덱스를 동기식으로 구축합니다. 즉, 키워드 인덱스에 사용되는 인덱스는 항상 최신 상태이며 실시간으로 작동할 수 있습니다. 그러나 일부 콘텐츠 및 워크로드에서는 비동기식 벌크 인덱스가 더 효율적일 수 있습니다.