2013-07-25 19 views
38

Ho letto molta buona documentazione su come implementare la ricerca elastica su un sito Web con javascript o PHP.Come utilizzare la ricerca elastica su un database SQL preesistente?

Ottimo introduction to ES.

Documentazione molto completa here e here.

Un intero CRUD.

Ricerca elastica con PHP: here, here e here.

Quindi il motivo per cui ti sto dando quegli URL è capire come utilizzare una o più di quelle grandi documentazioni quando hai un DB SQL preesistente.

Mi manca il punto da qualche parte: come hanno detto Elasticsearch creerà i propri indici e DB con MongoDB, non capisco come posso usare il mio (gigantesco) database usando SQL? Diciamo che ho un DB MySQL e vorrei usare Elasticsearch per rendere più veloce la mia ricerca e per proporre le domande pre-fatte dall'utente, come faccio? Come funziona ES su/lungo MySQL? Come trasferire questo gigantesco set di dati (oltre 8 GB) in ES DB per essere completamente efficiente all'inizio?

Molte grazie

+0

Pensate elasticsearch come un altro db, si tratta di un documento di database NoSQL base (come MongoDB) in maniera ottimale per la ricerca. Dovrai indicizzare tutti i dati in elasticsearch per usarli. – ramseykhalaf

+0

Quindi vuoi dire che dovrò trasferire tutte le informazioni che ho nel mio DB attuale in ES'NoSQL db? Quindi ogni volta che aggiungo qualcosa al mio DB SQL, devo fare una copia al DB di ES? –

+4

Esistono tecniche per mantenerle sincronizzate. Guarda i fiumi. Devi solo importare le informazioni che potresti effettivamente utilizzare per la ricerca, quindi potrebbe non essere in ogni campo. Basti pensare a come sarebbe in grado di eseguire ricerche molto più velocemente di SQL senza riorganizzare i dati in qualche modo? Se non fosse necessario farlo, sicuramente il database mySQL avrebbe implementato qualcosa! – ramseykhalaf

risposta

21

sto usando jdbc-river w/mysql. È molto veloce È possibile configurarli per eseguire il polling continuo dei dati o utilizzare le importazioni una tantum (strategia one-shot).

ad es.

curl -xPUT http://es-server:9200/_river/my_river/_meta -d ' 
{ 
    "type" : "jdbc", 
    "jdbc" : { 
     "strategy" : "simple", 
     "poll" : "5s", 
     "scale" : 0, 
     "autocommit" : false, 
     "fetchsize" : 10, 
     "max_rows" : 0, 
     "max_retries" : 3, 
     "max_retries_wait" : "10s", 
     "driver" : "com.mysql.jdbc.Driver", 
     "url" : "jdbc:mysql://mysql-server:3306/mydb", 
     "user" : "root", 
     "password" : "password*", 
     "sql" : "select c.id, c.brandCode, c.companyCode from category c" 
    }, 
    "index" : { 
     "index" : "mainIndex", 
     "type" : "category", 
     "bulk_size" : 30, 
     "max_bulk_requests" : 100, 
     "index_settings" : null, 
     "type_mapping" : null, 
     "versioning" : false, 
     "acknowledge" : false 
    } 
}' 
4

Se avete bisogno di una soluzione più performante e scalabile per il polling offerto da JDBC-fiume, vi consiglio di guardare questo presentazione che spiega come eseguire la sincronizzazione incrementale da SQL Server in elasticsearch:

I principi discussi nel video si applicano anche ad altre applicazioni di replica RDBMS -> NoSQL.

Problemi correlati