10:30 ~ 11:00 회의준비
11:00 ~ 12:00 회의
13:00 ~ 21:30 api 수정 및 개발
21:30 ~ 22:00 블로깅
멘토와 클래스를 서치하는 검색을 만들기 위해 노력했다.
통합 유저의 형식으로 되어있어 유저중에서 role이 멘토이며 관리자가 status를 'AUTHORIZED'로 승인해준 사람만이 검색되어야한다.
//멘토 서치
@Query(() => [SearchMento])
async fetchHomeSearch(@Args('search') search: string) {
const result = await this.elasticsearchService.search({
index: 'mentor', // 테이블명
sort: ['_score'],
query: {
bool: {
should: [{ match: { name: search } }],
must: [
{ match: { role: 'MENTOR' } },
{ match: { mentostatus: 'AUTHORIZED' } },
],
},
},
});
const resultarray = result.hits.hits.map((ele: any) => ({
id: ele._source.id,
companyName: ele._source.companyname,
department: ele._source.department,
name: ele._source.name,
selfIntro: ele._source.selfintro,
}));
console.log(resultarray);
if (!resultarray) throw '검색결과가 없습니다.';
return resultarray;
}
클래스 타이틀과 상세설명 과 멘토이름을 ngram 으로 분석된 단어들로 검색하게 함
//클래스 서치
@Query(() => [SearchLecture])
async fetchLectureSearch(@Args('search') search: string) {
const result = await this.elasticsearchService.search({
index: 'lecture', // 테이블명
query: {
bool: {
should: [
{ match: { classTitle: search } },
{ match: { classDescription: search } },
{ match: { name: search } },
],
},
},
});
console.log(result);
const resultarray = result.hits.hits.map((ele: any) => ({
id: ele._source.id,
companyName: ele._source.companyName,
department: ele._source.department,
name: ele._source.name,
selfIntro: ele._source.selfIntro,
classTitle: ele._source.classTitle,
classDescription: ele._source.classDescription,
rating: ele._source.rating,
}));
console.log(resultarray);
if (!resultarray) throw '검색결과가 없습니다.';
return resultarray;
}