텍스트 검색 수행(자체 관리 배포서버)
MongoDB 는 MongoDB 에서 호스팅되는 데이터에대해 프리미엄 전체 텍스트 AtlasMongoDB Atlas MongoDB AtlasSearch 솔루션인 Atlas Search 를 제공합니다. MongoDB deployment를 자체 관리하는 사용자는 레거시 텍스트 Atlas Search 기능을 사용할 수 있습니다.
자체 관리형 배포서버에서 텍스트 검색 쿼리를 실행 하려면 컬렉션 에 텍스트 인덱스 가 있어야 합니다. MongoDB 는 string 콘텐츠에 대한 텍스트 검색 쿼리를 지원 하기 위해 텍스트 인덱스를 제공합니다. 텍스트 인덱스에는 값이 string 또는 string 요소의 배열 인 모든 필드 가 포함될 수 있습니다. 컬렉션 에는 텍스트 검색 인덱스 가 하나만 있을 수 있지만 해당 인덱스 는 여러 필드를 포함할 수 있습니다.
동작, 토큰화 및 속성을 포함한 텍스트 인덱스에 대한 전체 참조는 자체 관리 배포서버 의 텍스트 인덱스 섹션을 참조하세요.
예시
이 예시에서는 텍스트 인덱스를 작성하고 이를 사용하여 텍스트 필드만 지정된 커피숍을 찾는 방법을 보여 줍니다.
컬렉션 생성
다음 문서를 사용하여 stores
collection을 생성합니다.
db.stores.insertMany( [ { _id: 1, name: "Java Hut", description: "Coffee and cakes" }, { _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" }, { _id: 3, name: "Coffee Shop", description: "Just coffee" }, { _id: 4, name: "Clothes Clothes Clothes", description: "Discount clothing" }, { _id: 5, name: "Java Shopping", description: "Indonesian goods" } ] )
텍스트 인덱스 만들기
mongosh
에서 다음을 실행하여 name
및 description
필드에 대한 텍스트 검색을 허용합니다.
db.stores.createIndex( { name: "text", description: "text" } )
정확한 구문 검색
정확한 구를 큰따옴표로 묶어 검색할 수도 있습니다. $search
문자열에 구와 개별 용어가 포함되어 있으면 텍스트 검색은 해당 구가 포힘된 문서에만 일치합니다.
예를 들어, 다음은 "coffee shop"을 포함하는 모든 문서를 찾습니다.
db.stores.find( { $text: { $search: "\"coffee shop\"" } } )
자세한 내용은 구문을 참조하세요.
텀 제외
단어를 제외하려면 '-
' 문자를 앞에 붙이면 됩니다. 예를 들어, 'java' 또는 'shop'을 포함하지만 'coffee'는 포함하지 않는 모든 스토어를 찾으려면 다음을 사용합니다.
db.stores.find( { $text: { $search: "java shop -coffee" } } )
결과 정렬
MongoDB 는 기본값 정렬되지 않은 순서로 결과를 반환합니다. 그러나 $text
쿼리는 문서 가 쿼리 와 얼마나 잘 일치하는지를 지정하는 각 문서 의 관련성 점수를 계산합니다.
관련성 점수 순서로 결과를 정렬하려면 $meta
textScore
필드를 명시적으로 투영하고 이를 기준으로 정렬해야 하며 다음과 같습니다.
db.stores.find( { $text: { $search: "java coffee shop" } }, { score: { $meta: "textScore" } } ).sort( { score: { $meta: "textScore" } } )
$text
집계 파이프라인 에서도 사용할 수 있습니다.