DB ↔ ES 동기화(요기는 작성 중)

Untitled

현재 서비스에서는 ES를 1차 DB로 사용하지 않고, 검색 엔진으로 사용하기 때문에 DB와 ES를 동기화해야합니다.

Logstash라는 ELK 스택 중 하나를 사용하면, 이런 데이터 처리 과정을 조금은 수월하게 지원해줘서 이번에는 Logstash를 활용해 DB를 동기화를 수행한다.

Logstash 설정

config/logstash.conf

input {
    jdbc {
        jdbc_driver_library => "드라이버 위치"
        jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
        jdbc_connection_string => "DB 주소"
        jdbc_user => "DB User"
        jdbc_password => "DB Password"
        statement => "SELECT query"
        schedule => "* * * * *"
    }
}

output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "test-diary1"
        document_id => "test-%{diaryid}"
    }
    stdout {
        codec => rubydebug
    }
}

외부 서버 DB와 ES를 동기화 하기 위해서 Logstash를 사용한다.

JDBC 플러그인을 사용해 외부 DB와 커넥션을 연결할 수 있도록 구성하고, 매 분 현재 ES 저장소의 데이터와 updatedAt 정보를 비교해 일치하지 않는다면 데이터를 최신화 하고 있다.

데이터 동기화 화면

Untitled

Untitled


데이터를 전처리 해버릴까요?

서비스에 특성 상 검색의 정확도를 높히기 위해서 몇가지 전처리를 수행해야한다.

  1. 한국어를 잘 추출하기 한국어

Untitled

ES에서 가장 중요한 개념은 역색인이다.