我需要使用python和mysql以编程方式执行完全导入或delta导入。我知道java中的过程。我们可以通过以下方式实现:
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中实现它。你能在python或任何支持这个的solr python api中建议等效的代码吗?
答案 0 :(得分: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
下可以使用相同的功能:
import urllib2
urllib2.urlopen('http://localhost:8983/solr/collection/dataimport?command=full-import')
或者如果您正在使用requests
库(可以通过pip install requests
安装):
import requests
requests.get('http://localhost:8983/solr/collection/dataimport?command=full-import')
答案 1 :(得分: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索引。然后完成后,执行提交。如果是完整查询,则可以在不提交的情况下清除所有数据,并且一旦完成最终提交,旧数据将被删除。