문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

텍스트 인덱스 만들기

이 페이지의 내용

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

참고

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

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

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

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 문자열을 검색합니다.

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' ]
}
]
← 텍스트 인덱스