Docs Menu
Docs Home
/
데이터베이스 매뉴얼
/

자체 관리 배포서버에서 텍스트 검색

참고

이 페이지에서는 자체 관리(비Atlas) 배포를 위한 텍스트 쿼리 기능에 대해 설명합니다. MongoDB 에서 호스팅되는 데이터의 경우, MongoDB 향상된 전체 텍스트 쿼리 솔루션인MongoDB Search와 벡터 검색 솔루션인Vector 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" },
{ _id: 6, name: "NYC_Coffee Shop", description: "local NYC coffee" }
]
)

mongosh에서 다음을 실행하여 namedescription 필드에 대한 텍스트 검색을 허용합니다.

db.stores.createIndex( { name: "text", description: "text" } )

정확한 여러 단어로 구성된 문자열을 큰따옴표로 묶어 검색 할 수 있습니다. 텍스트 검색 전체 문자열을 포함하는 문서만 일치합니다.

예시 를 들어, 다음 쿼리 "coffee shop" 문자열을 포함하는 모든 문서를 찾습니다.

db.stores.find( { $text: { $search: "\"coffee shop\"" } } )

이 쿼리 다음 문서를 반환합니다.

[
{ _id: 3, name: 'Coffee Shop', description: 'Just coffee' },
{ _id: 6, name: 'NYC_Coffee Shop', description: 'local NYC coffee' }
]

지정하지 않는 한 정확한 문자열 검색 대소문자를 구분하거나 분음 부호를 구분하지 않습니다. 예시 를 들어 다음 쿼리 이전 쿼리 와 동일한 결과를 반환합니다.

db.stores.find( { $text: { $search: "\"COFFEé 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 집계 파이프라인 에서도 사용할 수 있습니다.

돌아가기

Atlas Vector Search

이 페이지의 내용