Python SOLR-一次添加一个条目

Python SOLR-一次添加一个条目,python,search,solr,Python,Search,Solr,我正在构建一个系统,在这个系统中,条目会在一天中不定期地添加到SQL数据库中。我试图创建一个系统,每次都将这些条目导入SOLR 我似乎找不到任何关于从SQL向SOLR添加单个记录的信息。有人能给我指出正确的方向或给我更多的信息让我走吗 任何帮助都将不胜感激 詹姆斯,你看过这个网站的维基页面了吗?我相信它可以满足您的需要。如果您可以访问将条目添加到SQL数据库中的代码,只需对其进行修改,以另外创建一个XML字符串,并将其发布到您的Solr服务器URL。这样可以避免很多复杂性。例如,在PHP中,您可

我正在构建一个系统,在这个系统中,条目会在一天中不定期地添加到SQL数据库中。我试图创建一个系统,每次都将这些条目导入SOLR

我似乎找不到任何关于从SQL向SOLR添加单个记录的信息。有人能给我指出正确的方向或给我更多的信息让我走吗

任何帮助都将不胜感激


詹姆斯,你看过这个网站的维基页面了吗?我相信它可以满足您的需要。

如果您可以访问将条目添加到SQL数据库中的代码,只需对其进行修改,以另外创建一个XML字符串,并将其发布到您的Solr服务器URL。这样可以避免很多复杂性。例如,在PHP中,您可以执行以下操作:

$url = "http://localhost:7641/solr/update";
$header = array("Content-type:text/xml; charset=utf-8");
$postString = "<add><doc><field name=\"id\">24</field></doc?</add>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
$data = curl_exec($ch);
curl_setopt($ch, CURLOPT_POSTFIELDS, "<commit />");
$data = curl_exec($ch);
$url=”http://localhost:7641/solr/update";
$header=array(“内容类型:text/xml;字符集=utf-8”);

$postString=,以查询新项目并将其导入到Solr中。您必须定期调用DataImportHandler请求处理程序。

如上所述,数据导入处理程序可以满足您的需要,但是一个重要的限制是它不会对请求进行排队。这样做的结果是,如果DIH正忙于索引某些内容,而您又发出了另一个DIH请求,那么第二个DIH请求将被忽略,并且不会被索引

正如Ansari所建议的,更直接的路由是直接将数据通过HTTP发布到Solr服务器。他指出,XML方法绝对可以很好地工作。但是,我发现使用该方法更简单,因为它允许我在收集数据时使用本机数据结构


当使用UpdateJSON或UpdateXMLMessage方法时,我强烈建议使用“commitWithin”参数而不是“commit”。提交可能是一个(相对)漫长的过程,需要Solr锁定文件,commitWithin会将多个更新请求批处理到一个提交中,而“提交”则需要为每个帖子锁定文件。

除了DIH,您可以在数据库中设置一个触发器来触发Solr的REST服务,该服务将为所有插入/更新/删除的文档更新已更改的文档


此外,您可以在应用程序中设置一个过滤器(javax.servlet规范),以拦截服务器请求,并在它们到达数据库之前将它们推送到Solr(甚至可以在同一事务中完成,但很少真正需要这样做,最终的一致性通常适用于搜索引擎).

您使用的是python web框架吗?我使用的是带有python和Flask frameworkHi的MySolr插件。谢谢您的回复。我以前没听说过这种方法,你愿意详细介绍一下吗。这就是你说的吗@是的,我不知道这个页面的存在,但它准确地描述了我的意思。这一页听起来很复杂,但实际上很简单。查看关于通过cURL更新数据的部分,如果您有更具体的问题,请告诉我。