2017-01-03 1 views
0

Ich muss den vollständigen Import oder Delta-Import programmgesteuert mit Python und MySQL ausführen. Ich kenne den Prozess in Java. Wir können es auf folgende Weise tun:Wie konfiguriert man Solr und den vollständigen Datenimport von MySQL mit Python?

CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://localhost:8983/solr"); 
ModifiableSolrParams params = new ModifiableSolrParams(); 
params.set("command", "full-import"); 
QueryRequest request = new QueryRequest(params); 
request.setPath("/dataimport"); 
server.request(request); 

Ich versuche, es in Python zu implementieren. Können Sie den entsprechenden Code in Python oder einer Solr Python API vorschlagen, die dies unterstützt?

Antwort

0

Sie lösen den DataImportHandler aus, indem Sie eine einzelne HTTP-Anfrage machen, und das Java-Beispiel ist nur eine Möglichkeit, dies mit dem SolrJ-Paket zu tun.

In nativer python3 können Sie dies tun, indem urllib.request mit:

import urllib.request 
urllib.request.urlopen('http://localhost:8983/solr/collection/dataimport?command=full-import') 

In python2 gleicher Funktion unter urllib2 verfügbar:

import urllib2 
urllib2.urlopen('http://localhost:8983/solr/collection/dataimport?command=full-import') 

Oder wenn Sie die requests Bibliothek verwenden (die kann installiert werden durch pip install requests):

import requests 
requests.get('http://localhost:8983/solr/collection/dataimport?command=full-import') 
+0

Ich kenne diese Methoden. Ich wollte nur wissen, ob es eine Python-API gibt, die SolrJ für Solr 6.3 ähnlich ist. Ich habe angegeben, mit sunburnt zu arbeiten, aber es funktioniert überhaupt nicht für Version Grtr als Solr 4.8. Können Sie mir Alternativen vorschlagen? –

0

Es gibt ein paar Python-APIs, aber ich benutze mysolr (http://mysolr.readthedocs.io/en/latest/user/userguide.html), weil Sie Json bei der Indizierung verwenden können, was es schneller macht.

from mysolr import Solr 

    ## For full index, delete all data after final commit: 
    solr.delete_by_query('*:*', commit=False) 

    solr = Solr("http://localhost:8983/solr/collection", version=4) 
    documents = [ 
     {'id' : 1, 
     'field1' : 'foo' 
     }, 
     {'id' : 2, 
     'field1' : 'bar' 
     } 
    ] 

    solr.update(documents, 'json', commit=False) 
    solr.commit() 

Sie können in einer Zeit wie 1000 Datensätze abfragen, um eine Liste von ihnen („Dokumente“ weiter oben) erstellen und sie an den solr Index schicken. Wenn Sie fertig sind, machen Sie das Commit. Wenn es sich um eine vollständige Abfrage handelt, können Sie alle Daten löschen, ohne zu committen, und die alten Daten werden gelöscht, sobald Sie das endgültige Commit durchgeführt haben.

+0

Unterstützt es solr 6.3? Ich versuche es zu implementieren, aber es funktioniert nicht –

+0

Könnten Sie genauer sein, was nicht funktioniert? Verwenden Sie die Python-Shell, um den Test durchzuführen, und schreiben Sie die Fehlermeldung aus. Ich benutze Solr 5.1, habe es aber auch auf Solr 6.3 getestet. Die obige Version = 4 bezieht sich auf Solr 4, da es zwischen den Versionen 3 und 4 Änderungen in der Solr-API gab (die einzigen Optionen sind 1, 3 und 4). Die "Sammlung" in der URL sollte der Name Ihrer Sammlung sein. –

Verwandte Themen