본문 바로가기

코딩/NodeJS

nodejs랑 mongodb에서 검색 기능 최적화하기(1)

반응형

1. 개요

  • 검색할 데이터가 너무 많으면 검색하기 어려움
  • indexing이 되어있는 데이터에는 binary search 개념을 도입할 수 있음
  • binary search는 이진탐색인데 검색할 데이터가 정렬되어있어야 함
  • indexing은 데이터를 정렬하는 행위
  • 몽고DB에서는 오름차순으로 정렬되어 있는 _id를 이용해서 검색하면 binary search 가능
  • mongoDB atlas에서 인덱싱 할 수 있음
  • 인덱싱 해둔 데이터를 검색하면 부분 검색어로도 검색 가능

2. MongoDB Atlas에서 인덱싱하기

  • 인덱싱 하고싶은 collection에 접속 후 Indexes탭으로 들어감
  • [Create Index]버튼을 눌러줌

  • 이렇게 제목을 text 순으로 정렬해준다

3. 코드

(1) server.js

// 검색 기능
app.get("/search", (요청, 응답) => {
  // querystring의 값을 찍어보자
  console.log(요청.query.value);
  db.collection("post")
    // db에서 제목값이 요청.query.value인 게시글을 모두 찾아줌
    // 아래 형태를 이용하면 text index 만들어둔 걸 이용해서 검색해줌
    .find({ $text: { $search: 요청.query.value } })
    .toArray((에러, 결과) => {
      console.log(결과);
      응답.render("searchCon.ejs", { posts: 결과 });
    });
});
  • 찾을 값을 {$text: { $search: 검색어}}형태로 수정해줌

3. 단점

  • 근데 이러면
  • “오늘 하루는 맑아요” 라는 문장을 검색하고 싶어서
  • ‘하루’를 검색하잖슴 ?
  • 그럼 검색 못함…
  • 웃긴게
  • ‘오늘’, ‘하루는’, ‘맑아요’를 각각 검색하면 찾아주는데
  • ‘오’, ‘하’ 등 글자를 분해해서 검색하면 못찾음
반응형