2016-03-05 12 views
12

Ostatecznie chcę mieć skalowalne rozwiązanie do wyszukiwania danych w PostgreSql. Moje odkrycie wskazuje na to, że używam Logstash do wysyłania zdarzeń zapisu z Postgres do ElasticSearch, jednak nie znalazłem użytecznego rozwiązania. Rozwiązania, które znalazłem, wymagają użycia danych wejściowych jdbc do zapytania wszystkich danych z Postgres w przedziale, a zdarzenia usuwania nie są przechwytywane.Synchronizuj dane postgreSql z ElasticSearch

Myślę, że jest to powszechny przypadek użycia, więc mam nadzieję, że możecie podzielić się ze mną swoim doświadczeniem lub dać mi wskazówki, aby kontynuować.

+1

Ta odpowiedź może być pomocna (pod koniec, w którym wspomnę o rozwiązaniach bin/Go w języku Python): http://stackoverflow.com/questions/34477095/elasticsearch-replication-of-other-system-data/34477639#34477639 – Val

+0

Dziękuję Val za wskazówkę. Znalazłem ten post przed zadaniem tego pytania. Jednak myślę, że teraz mogę użyć input-jdbc i wykonać trochę dodatkowej pracy, aby poradzić sobie z usuniętymi danymi. Czy wiesz, jak skonfigurować Logstash do przechwytywania zdarzeń z Postgres? – Khanetor

+0

Uhm ... Myślę, że aby obejść problem DELETE, nigdy nie skasowałbym żadnego rekordu w mojej głównej bazie danych, i po prostu oznaczam te rekordy jako "usunięte", a zostanie to odzwierciedlone w ElasticSearch. Kiedy mam ochotę usuwać rzeczy, ustawiłem harmonogram usuwania zarówno w głównej bazie danych, jak i ES, aby usunąć wszystko z usuniętym znakiem. – Khanetor

Odpowiedz

10

Jeśli chcesz również otrzymywać powiadomienia o usuniętych rekordach i usunąć odpowiedni rekord w Elasticsearch, prawdą jest, że dane wejściowe LogDash jdbc nie pomogą. Trzeba użyć rozwiązania działającego na binlog jako suggested here Jednakże, jeśli nadal chcesz użyć wejścia jdbc Logstash, możesz po prostu delikatnie usunąć rekordy w PostgreSQL, np. Utwórz nową kolumnę BOOLEAN w celu oznaczenia twoich rekordów jako deleted. Ta sama flaga będzie istnieć w Elasticsearch i możesz wykluczyć je ze swoich wyszukiwań za pomocą prostego zapytania term na polu deleted.

Ilekroć zajdzie potrzeba wykonania czyszczenia, można usunąć wszystkie zapisy oznaczone flagą deleted zarówno w PostgreSQL, jak i Elasticsearch.