참고
MongoDB 향상된 전체 텍스트 검색 솔루션인 MongoDB Search와 벡터 검색 솔루션인 MongoDB Vector Search를 제공합니다. 텍스트 인덱스 대신 MongoDB Search 인덱스 또는 MongoDB Vector Search 인덱스 를 사용하는 것이 좋습니다.
텍스트 인덱스는 string 콘텐츠가 포함된 필드에 대한 $text 쿼리를 지원합니다. 텍스트 인덱스는 string 콘텐츠 내에서 특정 단어 또는 여러 단어로 구성된 string을 검색할 때 성능을 향상시킵니다.
텍스트 인덱스 만들려면 db.collection.createIndex() 메서드를 사용합니다. 문자열 또는 문자열 요소의 배열 포함된 필드 인덱스 하려면 "text" 문자열을 인덱스 키로 지정합니다.
db.<collection>.createIndex( { <field1>: "text", <field2>: "text", ... } )
이 작업에 대하여
컬렉션에는 최대 하나의 텍스트 인덱스가 있을 수 있습니다.
MongoDB Search (MongoDB 에서 사용 가능)는 단일 컬렉션 에서 여러 개의 전체 텍스트 검색 인덱스를 지원합니다. 자세한 학습 은 MongoDB 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 필드 에 대한 $text 쿼리를 지원합니다. 예시 들어, 다음 쿼리 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" } } )
앞의 쿼리 문서를 반환하지 않습니다. string food 는 문서 _id: 2 및 _id: 3에 나타나지만 about 및 keywords 필드에는 각각 나타납니다. about 및 keywords 필드는 텍스트 인덱스 에 포함되지 않으므로 $text 쿼리 결과에 영향을 주지 않습니다.
복합 텍스트 인덱스 만들기
참고
이 예시에서 인덱스를 만들려면 먼저 blog 컬렉션에서 기존 텍스트 인덱스를 제거해야 합니다.
blog 컬렉션의 about 및 keywords 필드에 복합 텍스트 인덱스를 생성합니다.
db.blog.createIndex( { "about": "text", "keywords": "text" } )
인덱스 about 및 keywords 필드에 대한 $text 쿼리를 지원합니다. 예시 들어, 다음 쿼리 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' ] } ]