Ver1.
async searchHumorBoard(searchQueryDto: SearchQueryDto) {
const boolQuery = {
bool: {
should: [],
minimum_should_match: 1,
},
};
//만약 title쿼리값이 있을 경우,
if (searchQueryDto.titleQuery) {
boolQuery.bool.should.push({
match: { title: searchQueryDto.titleQuery },
});
}
//만약 content 쿼리값이 있을 경우,
if (searchQueryDto.contentQuery) {
boolQuery.bool.should.push({
match: { content: searchQueryDto.contentQuery },
});
}
const data = await this.esService.search({
index: searchQueryDto.boardName,
body: {
query: boolQuery,
sort: [
{
updated_at: {
order: 'desc',
},
},
],
},
});
// 검색 결과에서 문서들의 배열을 추출
const hits = data.body.hits.hits;
// 각 검색 결과 문서(_source)를 결과 배열에 저장
let result = hits.map((hit) => hit._source);
return result; // 검색 결과 반환
}
제목, 내용, 제목+내용 별로 검색할 수 있게끔 코드를 구성했음
불과 8개의 데이터만 찾아오는데도 불구하고, 모든 데이터를 다 조회해서 그런지 1153ms나 걸림
이때 총 데이터는 약 800개
데이터를 50000개 추가해서 한번더 해볼 예정
약 데이터를 80000개정도 추가하고, 영어로 된 데이터를 검색해봤다.
hit count가 680개인데 불과 15ms밖에 안걸렸다.. 아무래도 한글이라서 오래 걸리는거라고 생각된다.
영어는 주로 구두점, 공백을 통해 토큰화가 진행되기 때문에, 검색어를 토큰화하는데 있어서 매우 짧은 시간이 걸린다. 하지만 한글같은 경우에는 구두점, 공백 뿐 아니라 어근, 어미의 분리를 통한 토큰화가 진행되기 때문에 많은 시간이 걸릴 수 밖에 없다.
난 80000개의 데이터를 더 넣고 검색했는데, 동일하게 한글로 검색했을때 둘다 800 ~ 1000ms 밖에 걸리지 않았다.
영어로 된 데이터를 집어넣었다고 하더라도 왜 검색속도에 차이가 없는건가?