[상황]

 - 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사항이 있다면 정리해서 공유하도록 하겠습니다.

 

반응형
블로그 이미지

visualp

c#, java

,