1. MongoDB 전문검색 인덱스
MongoDB 인덱스에서 전문검색 인덱스는 문자열을 빠르게 검색해 주는 방법이다.
형태소 분석방식과 N-Gram 알고리즘 방식이 있다.
2. MongoDB 테스트 버전
유형 | 버전 | 구성 |
mongosh | 2.2.10 | |
mongodb | 7.0.12 | Config : 1개, 포트 20000 Route : 1개, 포트 20001 Shard1 : 1개, 포트 30001 Shard2 : 1개, 포트 40001 |
3. MongoDB 테스트 데이터 적재
인덱스 생성 시 text 옵션을 주면 전문검색 인덱스로 생성된다.
[direct: mongos] indexDB> db.wordCollection.insert( { contents : "Mozi Blog is one of Tech Blogs" } )
{
acknowledged: true,
insertedIds: { '0': ObjectId('66b1b515eba581d9fa1b1580') }
}
[direct: mongos] indexDB> db.wordCollection.insert( { contents : "Mozi 블로그는 기술 블로그중 하나입니다." } )
{
acknowledged: true,
insertedIds: { '0': ObjectId('66b1b521eba581d9fa1b1581') }
}
[direct: mongos] indexDB> db.wordCollection.createIndex ( { contents : "text" } )
contents_text
4. 전문검색 인덱스 테스트
4-1. 전문검색 인덱스 조회
전문검색 시에는 find 에서 필드명을 사용하지 않는다.
$text 와 $search 를 사용한다.
[direct: mongos] indexDB> db.wordCollection.find ( { $text : { $search : "Mozi" } } )
[
{
_id: ObjectId('66b1b521eba581d9fa1b1581'),
contents: 'Mozi 블로그는 기술 블로그중 하나입니다.'
},
{
_id: ObjectId('66b1b515eba581d9fa1b1580'),
contents: 'Mozi Blog is one of Tech Blogs'
}
]
4-2. 전문검색 인덱스 조회 불가경우
그런데 조회가 되지 않는경우도 있다.
기 ,블로그 ,on 등 일부 단어로만 검색시에는 조회가 되지 않는다는 점이다.
[direct: mongos] indexDB> db.wordCollection.find ( { $text : { $search : "기" } } )
[direct: mongos] indexDB> db.wordCollection.find ( { $text : { $search : "기술" } } )
[
{
_id: ObjectId('66b1b521eba581d9fa1b1581'),
contents: 'Mozi 블로그는 기술 블로그중 하나입니다.'
}
]
[direct: mongos] indexDB> db.wordCollection.find ( { $text : { $search : "블로그" } } )
[direct: mongos] indexDB> db.wordCollection.find ( { $text : { $search : "블로그중" } } )
[
{
_id: ObjectId('66b1b521eba581d9fa1b1581'),
contents: 'Mozi 블로그는 기술 블로그중 하나입니다.'
}
]
[direct: mongos] indexDB> db.wordCollection.find ( { $text : { $search : "on" } } )
[direct: mongos] indexDB> db.wordCollection.find ( { $text : { $search : "one" } } )
[
{
_id: ObjectId('66b1b515eba581d9fa1b1580'),
contents: 'Mozi Blog is one of Tech Blogs'
}
]
이는 텍스트를 인덱스로 만들 때, 문자열 파싱을 어떻게 하냐에 따라 달라지기 때문이다.
5. 전문검색 인덱스 생성 옵션
5-1. 컬렉션에 전문검색 인덱스를 설정하는 방법
컬렉션에 전문검색을 설정하고 싶을 때는 필드부분에 $** 를 작성한다.
참고로 기존에 전문검색 인덱스가 있다면 생성이 불가능하다.
[direct: mongos] indexDB> db.wordCollection.createIndex ( { "$**" : "text" } )
$**_text
5-2. 전문검색 중요도 할당
전문검색 시 중요도를 이용하여 정렬할 수 있다.
중요도는 weights 를 사용하며 숫자값이 낮을수록 중요도가 높다.
참고로 기존에 전문검색 인덱스가 있다면 생성이 불가능하다.
[direct: mongos] indexDB> db.wordCollection.createIndex ( { contents : "text" }, { weights: { contents : 1 } } )
contents_text
'Database > MongoDB 실습' 카테고리의 다른 글
[MongoDB] Partial 인덱스 생성과 주의사항 (0) | 2024.08.12 |
---|---|
[MongoDB] 유니크 인덱스 생성 방법 (0) | 2024.08.12 |
[MongoDB] 멀티 키 인덱스 범위조건 사용하는 방법 (0) | 2024.08.06 |
[MongoDB] 샤딩 청크 샤드서버 할당하는 방법 (0) | 2024.07.31 |
[MongoDB] 레인지샤딩 범위나누는 방법 (0) | 2024.07.31 |