2017-01-03 56 views
0

我需要使用python和mysql以編程方式執行完全導入或增量導入。我知道在java中的過程。我們能做到這一點的方式如下:如何使用Python配置和運行MySQL中的Solr完整數據導入?

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); 

我想實現它的蟒蛇。你可以在python或任何支持這個的solr python api中推薦等效的代碼嗎?

回答

0

您通過發出一個HTTP請求來觸發DataImportHandler,Java示例只是使用SolrJ包執行此操作的一種方法。

在本地python3您可以通過使用urllib.request做到這一點:

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

在python2相同功能可用urllib2下:如果您使用的requests

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

或(其中可通過pip install requests安裝):

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

我知道這些方法。我只是想知道是否有任何類似solrJ的python api for solr 6.3。我說過曬太陽的工作,但是對於版本grtr而言,它不如4.8版本。你能建議一些替代品嗎? –

0

有幾個python API,但我使用mysolr(http://mysolr.readthedocs.io/en/latest/user/userguide.html),因爲您可以在索引中使用json,使其更快。

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() 

您可以同時查詢像1000條記錄,創建它們的列表(上面的「文件」),並將它們發送到Solr的索引。然後完成後,執行提交。如果它是一個完整的查詢,則可以在不提交的情況下清除所有數據,並且一旦完成最終提交,舊數據將被刪除。

+0

它支持solr 6.3嗎?我試圖實現它,但它不起作用 –

+0

你能更具體地說明什麼是不工作?使用python shell進行測試,並寫出錯誤消息。我使用solr 5.1,但我也在solr 6.3上測試過它。上面的版本= 4是指solr 4,因爲版本3和版本4之間的solr API發生了變化(唯一的選項是1,3和4)。網址中的「收藏」應該是您收藏的名稱。 –