Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

자체 관리 배포서버에 텍스트 인덱스 생성

이 페이지의 내용

  • 이 작업에 대하여
  • 시작하기 전에
  • 절차
  • 단일 필드 텍스트 인덱스 만들기
  • 복합 텍스트 인덱스 만들기

참고

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

텍스트 인덱스는 문자열 콘텐츠가 포함된 필드에 대한 텍스트 검색 쿼리를 지원 . 텍스트 인덱스는 문자열 콘텐츠 내에서 특정 단어 또는 여러 단어로 구성된 문자열을 검색할 때 성능을 향상시킵니다.

텍스트 인덱스 를 만들려면 db.collection.createIndex() 메서드를 사용합니다. string 또는 string 요소의 배열 이 포함된 필드 를 인덱스 하려면 "text" string 을 인덱스 키로 지정합니다.

db.<collection>.createIndex(
{
<field1>: "text",
<field2>: "text",
...
}
)
  • 컬렉션에는 최대 하나의 텍스트 인덱스가 있을 수 있습니다.

    Atlas Search(MongoDB Atlas에서 사용 가능)는 단일 컬렉션에서 여러 개의 전체 텍스트 검색 인덱스를 지원합니다. 자세히 알아보려면 Atlas Search 문서를 참조하세요.

  • 단일 텍스트 인덱스 에서 여러 필드를 인덱스 할 수 있습니다. 텍스트 인덱스 는 최대 32 개의 필드를 포함할 수 있습니다. 예시 를 보려면 복합 텍스트 인덱스 만들기를 참조하세요.

다음 문서로 blog 컬렉션을 생성합니다.

db.blog.insertMany( [
{
_id: 1,
content: "This morning I had a cup of coffee.",
about: "beverage",
keywords: [ "coffee" ]
},
{
_id: 2,
content: "Who likes chocolate ice cream for dessert?",
about: "food",
keywords: [ "poll" ]
},
{
_id: 3,
content: "My favorite flavors are strawberry and coffee",
about: "ice cream",
keywords: [ "food", "dessert" ]
}
] )

다음 예시는 그 방법을 보여줍니다.

content 필드 에 텍스트 인덱스 를 만듭니다.

db.blog.createIndex( { "content": "text" } )

인덱스는 content 필드에 대한 텍스트 검색 쿼리를 지원합니다. 예를 들어, 다음 쿼리는 content 필드에 문자열 coffee(이)가 포함된 문서를 반환합니다.

db.blog.find(
{
$text: { $search: "coffee" }
}
)

출력:

[
{
_id: 1,
content: 'This morning I had a cup of coffee.',
about: 'beverage',
keywords: [ 'coffee' ]
},
{
_id: 3,
content: 'My favorite flavors are strawberry and coffee',
about: 'ice cream',
keywords: [ 'food', 'dessert' ]
}
]

{ "content": "text" } 인덱스 는 content 필드 만 포함하며 인덱싱되지 않은 필드와 일치하는 항목을 반환하지 않습니다. 예를 예시, 다음 쿼리 는 blog 컬렉션 에서 food string 을 검색합니다.

db.blog.find(
{
$text: { $search: "food" }
}
)

앞의 쿼리는 문서를 반환하지 않습니다. 문자열 food가 문서 _id: 2_id: 3에 나타나지만 각각 about 필드와 keywords 필드에 나타납니다. aboutkeywords 필드는 텍스트 인덱스에 포함되지 않으므로 텍스트 검색 쿼리 결과에 영향을 주지 않습니다.

참고

이 예시에서 인덱스를 만들려면 먼저 blog 컬렉션에서 기존 텍스트 인덱스를 제거해야 합니다.

blog 컬렉션의 aboutkeywords 필드에 복합 텍스트 인덱스를 생성합니다.

db.blog.createIndex(
{
"about": "text",
"keywords": "text"
}
)

인덱스는 aboutkeywords 필드에 대한 텍스트 검색 쿼리를 지원합니다. 예를 들어, 다음 쿼리는 about 또는 keywords 필드에 food 문자열이 나타나는 문서를 반환합니다.

db.blog.find(
{
$text: { $search: "food" }
}
)

출력:

[
{
_id: 3,
content: 'My favorite flavors are strawberry and coffee',
about: 'ice cream',
keywords: [ 'food', 'dessert' ]
},
{
_id: 2,
content: 'Who likes chocolate ice cream for dessert?',
about: 'food',
keywords: [ 'poll' ]
}
]

돌아가기

Text Indexes