문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

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

참고

이 페이지에서는 자체 관리(비Atlas) 배포를 위한 텍스트 검색 기능에 대해 설명합니다. MongoDB Atlas에서 호스팅되는 데이터의 경우, MongoDB는 향상된 전체 텍스트 검색 솔루션인 Atlas Search를 제공합니다.

자체 관리형 배포에서 텍스트 검색 쿼리를 실행하려면 컬렉션에 텍스트 인덱스가 있어야 합니다. MongoDB는 문자열 콘텐츠에 대한 텍스트 검색 쿼리를 지원하는 텍스트 인덱스를 제공합니다. 텍스트 인덱스에는 값이 문자열이거나 문자열 요소의 배열인 모든 필드가 포함될 수 있습니다. 컬렉션에는 텍스트 검색 인덱스가 하나만 있을 수 있지만 이 인덱스는 여러 필드를 포함할 수 있습니다.

동작, 토큰화 및 속성을 포함한 텍스트 인덱스에 대한 전체 참조는 텍스트 인덱스 섹션을 참조하세요.

이 예제에서는 텍스트 인덱스를 작성하고 이를 사용하여 텍스트 필드만 지정된 커피숍을 찾는 방법을 보여 줍니다.

다음 문서를 사용하여 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는 기본적으로 정렬되지 않은 순서로 결과를 반환합니다. 그러나 텍스트 검색 쿼리는 문서가 쿼리와 얼마나 잘 일치하는지를 지정하는 각 문서의 관련성 점수를 계산합니다.

관련성 점수 순서로 결과를 정렬하려면 $meta textScore 필드를 명시적으로 투영하고 이를 기준으로 정렬해야 하며 다음과 같습니다.

db.stores.find(
{ $text: { $search: "java coffee shop" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )

aggregation pipeline에서도 텍스트 검색을 사용할 수 있습니다.

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