엘라스틱서치로 검색기능을 구현해보자 빠른 검색속도와 폭넓은 원하는검색 결과를 보여주기위해 단순 RDB쿼리가 아닌 엘라스틱서치로 구현해봤다

  1. 내프로젝트 상 채팅내역을 검색해야하기때문에 ChatMessage로 Document 클래스를 만들어준다
    1. 필드 타입에 키워드면 해당 단어를 다입력해야 검색이가능하고 ex) “내일 밥을 먹는다” 라고하면 내일 밥을 먹는다 다입력을해줘야 검색이가능하다
    2. 타입이 텍스트면 엘라스틱서치에 “내일” “밥을” “먹느다” < 이런식을 띄어쓰기로 구분해 저장이 되기 때문에 “내일” 만 쳐도 검색이가능하다 그래서 content에 Text 타입을 붙혀줬다

image.png

chatService 쪽에서 저장한 채팅을 Document Entity객체로 변환해주고 그대로 DocumentRepository에 저장해버리면 된다 간단한듯

image.png

image.png

컨트롤러에서 검색 api를 만들어주자

image.png

SearchService

image.png

1. RDB에서 보자면 대략..

Select * from chat_message

where content LIKE ‘%내일%’

AND workspaceId = ‘32’

LIMIT 100;

이런느낌이겠죠?근데 엘라스틱서치가 더똑똑하게 동작하기때매 속도도빠르고 ..

화면.. nori 라는 한국어 형태소 분석기를 사용했기에 “언제하냐” 가아닌 “언제”만 쳐도 검색이된다.

es.gif

키바나에서..

image.png