[Node+MongoDB]검색기능3(search index)

김나나·2024년 8월 30일

Node.js

목록 보기
32/50

지난 번 작성했던 포스팅에 이어..
부분검색이 필요한 경우에는 search index를 사용해보면 된다고 했으니 해보자!


  1. MongoDB 들어가서 search index 클릭

  2. "Create Search Index" 클릭

  3. "Visual Editor"클릭

  4. Index 이름을 작명해주고, 사용할 collection 선택 후 다음으로

  5. 아래 사진에 있는 곳을 클릭하여 index 설정을 해줄 수 있는데,

아래에 "Refine Your Index" 클릭

  1. Analyzer부분 "lucene.korean"으로 해주면 한국어로도 검색 잘 하게 만들어준다. 추가로, Dynamic Mapping은 모든 필드를 인덱싱 하는지에 대한 선택인데, 게시판에 title부분 검색기능만 할 것이기 때문에 꺼주었다.

위의 Dynamic Mapping을 꺼두었기 때문에 아래에서 Field Mappings으로 어떤 필드 index를 만들 것인지 선택을 해주자.
"Add Field Mapping" 클릭!!

어떤 필드인지 선택하고, 데이터타입 선택 후에
String Properties에서 "lucene.korean" 잘 선택되어 있는지 확인하고 다음으로 추가해주자

아래처럼 잘 추가되었으면 저장해준다!

조금만 기다리면 테스트를 해볼 수 있다.
"QUERY" 클릭해보자

  1. 검색해보면 잘 된다!

    저 형광펜? 칠해진 SCORE부분은 검색어와 관련있는 정도를 매겨주는 것.
    진짜대박완전편리하다.. 순위도 자동으로 매겨준다.

그럼 이제 진짜로 코드로 돌아와서..

✨search index 사용해서 document 검색해보자

  1. 지금까지 사용했던 .find 대신 .aggregate()를 사용해준다.
    aggregate를 사용하면 조건도 여러 개 걸 수가 있다.
    .aggregate([ {조건1}, {조건2} ])이런 식으로!
  let 검색조건 = [
    {
      $search: {
        index: "사용할 인덱스 이름",
        text: { query: "검색어", path: "검색할 필드이름" },
      },
    },
  ];

조건이 많기 때문에 변수 하나를 만들어 넣어두고,
.aggregate(검색조건)이런 식으로 사용하는 편이 가독성에 좋다.

안을 살펴보면 있는 $search는 search index를 사용해준다는 뜻이고,
만들었던 search index의 이름을 "사용할 인덱스 이름"에 넣어주면 된다.

  1. 이제 정말 다시 페이지로 이동해서 테스트해보자!

    검색 결과가 이번에는 잘 나온다!!

조건도 추가해보자면 이런 식으로..

조건에는 연산자를 써서 걸어줄 수 있다.

결과 정렬을 위해 $sort:{필드 : 1} 이런 식으로 작성해주면 된다.
$limit : 수량으로 결과수 제한을 걸 수도 있다.
$skip : 숫자: 건너뛰기
$project : 1또는0: 필드 숨기기 기능으로, 1은 보여주기 / 0은 숨기기
$project : {_id:0} 이렇게 작성한다고 하면 _id 필드를 숨긴다는 의미

profile
10분의 정리로 10시간을 아낄 수 있다는 마음으로 글을 작성하고 있습니다💕

0개의 댓글