현재 검색엔진으로 엘라스틱서치를 사용중이며 nori의 user-dictionary가 아닌 사전(mecab)을 직접 변경하여서 다시 nori의 plugin으로 빌드하여 사용중이다. 때문에 사전이 변경될때마다 reindex를 진행중이다. 하지만 점점 데이터가 많아지면서 매일 전체를 reindex하기는 무리가 있다고 판단하여 아래와같이 reindex 전략을 수정하였다.
- 전체 reindex는 주말에 한번
- 일정기간(유저들의 데이터 접근이 빈번한 기간) reindex는 하루에 한번
index를 일정기간별로 나누어 reindex 시간을 단축하여 사전변경적용을 빠르게하기 위함.
- 유저들의 접근이 높은 인덱스만 리인덱스하여 시간단축
- 유저가 찾고자하는 문서의 날짜를 받아 쿼리를 보낼때 전체 인덱스가 아닌 해당하는 날짜의 인덱스만 쿼리가 가능하여 쿼리 시간 단축
build.sh를 실행시키면 한번에 셋팅이 가능합니다. docker-compose의 elasticsearch 메모리 및 포트정도만 조정하면됨.
전체문서 737752개의 문서로 테스트함
2021-06 데이터 20039개 문서
- 리인덱스 시간 단축 / 아직 테스트안함 105034
- 쿼리 시간 단축
curl -X POST -d'{
"query": {
"match_all": {}
}
}' http://localhost:9210/mydata/_search
<!-- 1972ms -->
curl -X POST -d'{
"query": {
"match_all": {}
}
}' http://localhost:9210/mydata_2021-05,mydata_2021-06/_search
<!-- 10ms -->