본문 바로가기
Server/Node.js

검색기능 만들기(2) - indexing 개념

by print_soo 2023. 9. 8.

해당 글은 이전 글들의 작업을 이어서 진행되고 있는 글입니다.

 

 

만약 DB에 데이터가 1000만개 있을 때 데이터를 찾으면 어떻게 될까?

1000만개를 모두 탐색해야하기 때문에 굉장히 오랜시간 걸린다. 

 

따라서 DB는 보통 Binary Search라는 것을 사용한다. 

 

Binary Search란?

기본적으로 내림차순(오름차순)으로 정렬된 데이터에서 사용되는 탐색방법이다.

 

1. 전체 데이터의 평균이 되는 값을 찾는다.
2. 찾는 값이 해당 평균 값보다 큰지 작은지를 확인한다.
3. 2번 결과에 해당 되는 데이터의 평균이 되는 값을 다시 찾는다.
4. 찾는 값이 해당 평균 값보다 큰지 작은지를 확인한다.
5. 값을 찾을 때 까지 위의 방식을 반복한다.

 

 

 

 

 

이제 Mongo DB에서 indexing 작업을 해보자.

1. 인덱싱하려는 콜렉션에 들어가 indexes라는 메뉴를 찾는다.

 

 

 

2. 'CREATE INDEX'를 클릭한다. 

 

 

3. field 부분에 {인데스를 만들 항목 이름: 타입명}을 작성해준다. 

 

글자인 경우 text를 작성하고 숫자인 경우 1 또는 -1을 기입하고 생성해주면 된다. 

 

 

 

인덱싱이라는 것은 정렬된 Collection 사본을 만들어주는 작업이라고 생각하면된다.

 

 

4. 인덱스를 활용해서 검색하기

app.get('/search', (request, response) => {
    db.collection('post').find({ $text: {$search: request.query.value} }).toArray(function (error, result) {
        response.render('search.ejs', { keyword: result })
    });
})