2013-07-25 3 views
38

Ich habe eine Menge guter Dokumentation über die Implementierung der Elastic Search auf einer Website mit Javascript oder PHP gelesen.Wie wird Elastic Search auf einer bereits vorhandenen SQL-Datenbank verwendet?

Sehr gut introduction to ES.

Sehr vollständige Dokumentation here und here.

Ein ganzes CRUD.

Elastische Suche mit PHP: here, here und here.

Der Grund, warum ich Ihnen diese URLs gebe, ist zu verstehen, wie man eine oder viele dieser großartigen Dokumentationen benutzt, wenn man eine bereits existierende SQL DB hat.

Ich vermisse den Punkt irgendwo: Wie sie sagten Elasticsearch wird seine eigenen Indizes und DB mit MongoDB erstellen, ich verstehe nicht, wie kann ich meine (gigantische) Datenbank mit SQL verwenden? Nehmen wir an, ich habe eine MySQL-Datenbank, und ich möchte Elasticsearch verwenden, um meine Recherchen schneller zu machen und dem Benutzer vorgefertigte Abfragen vorzuschlagen. Wie mache ich das? Wie arbeitet ES mit MySQL? Wie kann man diesen gigantischen Datensatz (über 8 GB) in die ES DB übertragen, um am Anfang voll funktionsfähig zu sein?

Vielen Dank

+0

Denken Sie an Elasticsearch wie eine andere db, es ist ein Dokument auf Basis NoSQL-Datenbank (wie MongoDB) für die Suche optimiert. Sie müssen alle Daten in elasticsearch indizieren, um sie zu verwenden. – ramseykhalaf

+0

Sie meinen also, ich muss alle Informationen, die ich in meiner tatsächlichen DB habe in ES'NoSQL db übertragen? Dann muss ich jedes Mal, wenn ich etwas zu meiner SQL-Datenbank hinzufüge, eine Kopie in die DB von ES machen? –

+4

Es gibt Techniken, um sie synchron zu halten. Schaue Flüsse an. Sie müssen nur Informationen importieren, die Sie tatsächlich für die Suche verwenden, daher ist möglicherweise nicht jedes Feld vorhanden. Denken Sie nur darüber nach, wie es in der Lage wäre, viel schneller als SQL zu suchen, ohne die Daten irgendwie neu zu ordnen? Wenn es nicht getan werden müsste, dann hätten die Leute der mySQL-Datenbank sicher etwas implementiert! – ramseykhalaf

Antwort

21

ich jdbc-river w/mysql verwenden. Es ist sehr schnell. Sie können sie so konfigurieren, dass sie kontinuierlich Daten abfragt oder einmalige Importe (One-Shot-Strategie) verwendet.

z.B.

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

Wenn Sie eine leistungsfähigere und skalierbare Lösung für die von jdbc-Fluss angeboten Polling benötigen, empfehle ich Ihnen, diese Präsentation zu sehen, die erklärt, wie inkrementelle Synchronisierung von SQL Server in Elasticsearch auszuführen:

Die im Video besprochenen Prinzipien gelten auch für andere RDBMS -> NoSQL-Replikationsanwendungen.

Verwandte Themen