Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

텍스트 검색 수행(자체 관리 배포서버)

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에서 다음을 실행하여 namedescription 필드에 대한 텍스트 검색을 허용합니다.

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 집계 파이프라인 에서도 사용할 수 있습니다.

돌아가기

텍스트 검색