반응형
1. 개요
- text-index를 만들어두면 검색이 쉬워짐
- ‘or’ 연산자나 ‘-’ 연산자 같은거 사용 가능
- 부분 검색어로 검색 가능
- 근데 text-index는 단점이 있음
- 단어 일부만 검색하면 검색이 안됨
- mongodb는 띄어쓰기 기준으로 인덱싱 해주기 때문
2. Search Index 쓰기
- mongodb atlas에서 search index 만들기
- index Name 짓고
- 인덱스를 적용할 collection을 선택해야 함
- [Refine Your Index]를 클릭하고,
- lucene.korean으로 변경합시다
- 그 밑에 있는 [Add Field Mapping]버튼을 눌르세여
- Field Name은 제목으로 지정해주세여
3. 코드
// 검색 기능
app.get("/search", (요청, 응답) => {
// aggrigate에 들어갈 검색조건 만들기
var 검색조건 = [
{
$search: {
// 인덱스 이름
index: "titleSearch",
// 실제 검색 요청하는 부분
text: {
// 검색어
query: 요청.query.value,
// 어떤 항목에서 검색할건지 지정
path: "제목", // 제목날짜 둘다 찾고 싶으면 ['제목', '날짜']
},
},
},
// 검색 결과가 정렬된 상태로 나옴
{ $sort: { _id: 1 } },
// 검색 결과 최대 수를 제한해줌
{ $limit: 10 },
];
// querystring의 값을 찍어보자
console.log(요청.query.value);
db.collection("post")
// db에서 제목값이 요청.query.value인 게시글을 모두 찾아줌
.aggregate(검색조건)
.toArray((에러, 결과) => {
console.log(결과);
응답.render("searchCon.ejs", { posts: 결과 });
});
});
- 검색조건 넣어서 검색 가능
var 검색조건 = [
{
$search: {
// 인덱스 이름
index: "titleSearch",
// 실제 검색 요청하는 부분
text: {
// 검색어
query: 요청.query.value,
// 어떤 항목에서 검색할건지 지정
path: "제목", // 제목날짜 둘다 찾고 싶으면 ['제목', '날짜']
},
},
},
// 내가 원하는 결과만 필터링
// 값이 1이면 가져오고, 값이 0이면 안가져옴
// 검색 점수도 보여줄 수 있다
{ $project: { 제목: 1, _id: 1, score: { $meta: "searchScore" } } },
];
- project 쓰면 검색어와 게시물의 연관성을 계산하여 점수도 알려줌
반응형
'코딩 > NodeJS' 카테고리의 다른 글
nodejs에서 routes폴더 이용해서 라우터 관리하기 (0) | 2023.02.04 |
---|---|
nodejs에서 회원 게시판 기능 만들기 (0) | 2023.02.03 |
nodejs랑 mongodb에서 검색 기능 최적화하기(1) (0) | 2023.02.01 |
nodejs랑 mongodb로 검색 기능 만들기 (0) | 2023.01.31 |
nodejs에서 회원가입 기능 구현하기 (0) | 2023.01.30 |