Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

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

참고

이 페이지에서는 자체 관리형(Atlas 관리가 아닌) 배포서버를 위한 일반 텍스트 쿼리 기능에 대해 설명합니다. MongoDB Atlas에서 호스팅되는 데이터의 경우, MongoDB는 향상된 전체 텍스트 쿼리 솔루션인 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 집계 파이프라인 에서도 사용할 수 있습니다.

돌아가기

텍스트 검색