[상황]
- rdb를 이용해서 고객관련된 데이터가 구축되어 있음
- legcy 시스템에서 약 20년 동안 운영하면서 주소 데이터가 엉망이됨
( 신주소, 구주소, 회사에서 사용하는 배송을위한 행정구역주소: xxx동 xxx아파트)
- 주소검색의 필요성 : 간 혹 연락처 맵핑이 안되는 고객이 있음-
> 조회를 위해서 주소검색을 시도해야 함,
동일주소에 중복 주문이 발생 할 수 있음 ( 내가 주문하고, 부모님이 주문하고) <-- 중복주문
@fulltext searching 검색 엔진도입을 고민하게됨
[내가 생각했던 검색엔진 후보군]
1. mariadb에 10.x버전 부터 추가된 plugin mgroonga
2. elasticsearch
mgroonga
- aws에서 free tier 를 이용해서 mariadb서비스를 생성후 테스트 진행 mgroonga plugin지원 안함
- centos 설치하고 직접 mariadb 설치해서 간단하게 설치 후 테스트
- 한글 검색 지원
- table type -> mgroonga 생성되고 외래키 사용할 수 없음
- limitation : [참고]mroonga.org/docs/reference/limitations.html#limitations-of-table
elasticsearch
- 6.4 버전 전 까지만 해도 한글공식지원안됨
- 7.x 버전 설치해서 테스트 nori elasticsearch에서 공식지원됨
- uri 방식 or rest 방식으로 curd가능
- spring data jpa와 연계하여 쉽게 구현 가능
@ mgroonga vs elasticsearch 사실 비교할 여지가 없음
elasticsearch를 선택한 이유
- inverted index(역 색인) (매력적임)
- nori : 한글형태소 분석기
- rest api : 별도로 curd를 구현할 필요 없음 , 연동하기 편함
- 주소검색 뿐만아니라 다양하게 이용할 가능성이 있음.
- kibana : visualiztion에 특화된 도구
등등등 개발자가 해야할 일들이 줄어듬
[해결시나리오]
- 고객의 주소가 변경되면 -> elasicsearch 보내는 scheduler 개발(하루에 2번 정도 실행)
- elasticsearch로 주소 컬럼에서 검색 후 , 고객코드 리턴
- 리턴받은 고객코드로 실서비스 rdb에서 조회
- 주소 컬럼에 데이터를 넣을 떄 주소정보, 건물명(아파트명), 행정구역 , 광역시,시,군,구,동,리 포함
- 주소 컬럼에 건물명 ngram 2자, 3자 만들어서 추가 , (역 색인용)
ex) 화정동 힐스테이트 -> 화정 힐스, 화정 힐스테 검색되기위해서
보통 xxx동 xxx아파트 형태로 검색을 함
이미 개발은 완료 되서 실서비스 하고 있음. 해보고 iessu사항이 있다면 정리해서 공유하도록 하겠습니다.
'Elasticsearch' 카테고리의 다른 글
spring jpa , elasticsearch Matches query (0) | 2020.11.26 |
---|---|
elasticsearch default page size 기본 페이징 사이즈 (0) | 2020.11.25 |
@Setting, @Mapping nori 설정 (0) | 2020.11.25 |
@Setting, @Mapping nori 설정 (0) | 2020.11.24 |
elasticsearch srping boot connection 설정 (0) | 2020.11.24 |