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

와일드카드 텍스트 인덱스 생성

이 페이지의 내용

  • 이 작업에 대하여
  • 시작하기 전에
  • 절차
  • 결과
  • 단일 단어 검색
  • 여러 텀 검색
  • 정확한 구문 검색
  • 자세히 알아보기

컬렉션의 문자열 데이터가 있는 모든 문서 필드를 포함하는 텍스트 인덱스를 만들 수 있습니다. 이러한 텍스트 인덱스를 와일드카드 텍스트 인덱스 라고 합니다. 와일드카드 텍스트 인덱스는 알 수 없거나, 임의적이거나, 동적으로 생성된 필드에 대한 텍스트 검색 을 지원합니다.

와일드카드 텍스트 인덱스를 만들려면 인덱스 키를 와일드카드 지정자( $** )로 설정하고 인덱스 값을 text 로 설정합니다.

db.<collection>.createIndex( { "$**": "text" } )

와일드카드 텍스트 인덱스는 와일드카드 인덱스와 구별됩니다. 와일드카드 텍스트 인덱스는 $text 연산자를 사용하는 쿼리를 지원하지만 와일드카드 인덱스는 지원하지 않습니다.

참고

$text 자체 관리(비Atlas) 배포를 위한 텍스트 쿼리 기능을 제공합니다. MongoDB Atlas에서 호스팅되는 데이터의 경우, MongoDB는 향상된 전체 텍스트 쿼리 솔루션인 Atlas Search를 제공합니다.

와일드카드 텍스트 인덱스를 생성한 후 문서를 삽입하거나 업데이트하면 새 문자열 필드 값을 포함하도록 인덱스가 업데이트됩니다. 결과적으로 와일드카드 텍스트 인덱스는 삽입 및 업데이트의 성능에 부정적인 영향을 미칩니다.

인덱싱하려는 필드를 알 수 없거나 변경될 수 있는 경우에만 와일드카드 텍스트 인덱스를 사용하세요. 와일드카드 텍스트 인덱스는 특정 필드에서 대상 텍스트 인덱스만큼 성능이 좋지 않습니다. 컬렉션에 대상 인덱스를 방해하는 임의의 필드 이름이 포함된 경우 일관된 필드 이름을 갖도록 스키마를 리모델링하는 것이 좋습니다. 대상 인덱스에 대해 자세히 알아보려면 쿼리를 지원하는 인덱스 생성을 참조하세요.

다음 문서로 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" ]
}
] )

blog 컬렉션에 와일드카드 텍스트 인덱스를 만듭니다.

db.blog.createIndex( { "$**": "text" } )

와일드카드 텍스트 인덱스는 컬렉션의 모든 필드에 대한 텍스트 검색 쿼리를 지원합니다. 다음 쿼리를 고려해보세요.

blog 컬렉션에서 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' ]
}
]

앞의 쿼리는 모든 필드에 coffee 문자열이 포함된 모든 문서를 반환합니다.

blog 컬렉션에서 poll 또는 coffee 문자열이 포함된 문서를 쿼리합니다.

db.blog.find( { $text: { $search: "poll 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' ]
},
{
_id: 2,
content: 'Who likes chocolate ice cream for dessert?',
about: 'food',
keywords: [ 'poll' ]
}
]

앞의 쿼리는 임의의 필드에 string poll 또는 coffee가 포함된 문서를 반환합니다.

blog 컬렉션에서 chocolate ice cream 구문이 포함된 문서를 쿼리합니다.

db.blog.find( { $text: { $search: "\"chocolate ice cream\"" } } )

출력:

[
{
_id: 2,
content: 'Who likes chocolate ice cream for dessert?',
about: 'food',
keywords: [ 'poll' ]
}
]

앞의 쿼리는 모든 필드에 정확히 chocolate ice cream 구문이 포함된 문서를 반환합니다.

  • 텍스트 쿼리 결과의 순위를 제어하는 방법을 알아보려면 텍스트 검색 결과에 가중치 할당을 참조하세요.

  • 와일드카드 텍스트 인덱스를 복합 텍스트 인덱스의 일부로 포함할 수 있습니다. 복합 텍스트 인덱스에 대해 자세히 알아보려면 복합 텍스트 인덱스 생성을 참조 하세요.

  • 검색 쿼리의 예를 보려면 $text를 참조하세요.

    참고

    $text 자체 관리(비Atlas) 배포를 위한 텍스트 쿼리 기능을 제공합니다. MongoDB Atlas에서 호스팅되는 데이터의 경우, MongoDB는 향상된 전체 텍스트 쿼리 솔루션인 Atlas Search를 제공합니다.

  • 대소문자 구분과 같은 텍스트 인덱스 속성에 대해 자세히 알아보려면 텍스트 인덱스 속성을 참조하세요 .

← 텍스트 인덱스 만들기