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

"Create Search Index" 클릭

"Visual Editor"클릭

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

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

아래에 "Refine Your Index" 클릭

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

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

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

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


그럼 이제 진짜로 코드로 돌아와서..
.aggregate()를 사용해준다..aggregate([ {조건1}, {조건2} ])이런 식으로! let 검색조건 = [
{
$search: {
index: "사용할 인덱스 이름",
text: { query: "검색어", path: "검색할 필드이름" },
},
},
];
조건이 많기 때문에 변수 하나를 만들어 넣어두고,
.aggregate(검색조건)이런 식으로 사용하는 편이 가독성에 좋다.
안을 살펴보면 있는 $search는 search index를 사용해준다는 뜻이고,
만들었던 search index의 이름을 "사용할 인덱스 이름"에 넣어주면 된다.


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

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