2015-12-24 7 views
6

Qual è il modo migliore per indicizzare i dati in costante cambiamento in un database PostgreSQL in un database Solr/Elasticsearch?Indicizzazione dei dati da postgres a solr/elasticsearch

Ho un database postgres su AWS RDS e voglio eseguire ricerche complesse su di esso. Tuttavia, i dati su cui eseguirò una query verranno costantemente modificati con scritture/aggiornamenti molto elevati. Quindi non sono sicuro di come trasferire i dati a solr/elasticsearch in modo efficiente e affidabile.

Grazie per l'aiuto

risposta

2

In caso di Solr, un approccio generale è quello di utilizzare Data Import Handler (DIH in breve). Configura l'importazione completa & sql delta-import correttamente, dove delta import importa i dati dal database che cambia dall'ultima importazione giudicando tramite timestamp (quindi, è necessario uno schema di progettazione con data/ora corretta).

La tempi di delta-import, ha 2 stili che potrebbero essere utilizzati separatamente o combinati:

  • Do delta-importazione con un timer. (ad esempio ogni 5 minuti)
  • Dopo ogni aggiornamento nel database, effettuare una chiamata a delta-import.

Vedere https://cwiki.apache.org/confluence/display/solr/Uploading+Structured+Data+Store+Data+with+the+Data+Import+Handler per DIH dettaglio.

4

A rischio di qualcuno che contrassegna questa domanda come duplicato, ecco il collegamento per impostare postgres-to-elasticsearch in un altro thread StackOverflow. C'è anche this blog post su Atlassian che parla anche di come ottenere aggiornamenti in tempo reale da PostgreSQL in ElasticSearch.

Il thread Atlassian, per la folla tl; dr, utilizza stored procedure PGS per copiare i dati aggiornati/inseriti in una tabella di staging, quindi elabora separatamente la tabella di staging. È un buon approccio che potrebbe funzionare sia per ES che per Solr. Sfortunatamente, è una soluzione roll-your-own, a meno che tu non abbia familiarità con Clojure.