我在solr
中使用以下代码索引文档CURL *curl = curl_easy_init();
CURLcode res;
if(curl) {
/* First set the URL that is about to receive our POST. This URL can
just as well be a https:// URL if that is what should receive the
data. */
curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.0.164:8983/solr/collection1/update?replacefields=false -H 'Content-type: application/json' -d '[{\"id\":\"4000\", \"to\":\"Life is to.\", \"cc\":\"unknown \", \"subject\":\"Life\"}]'");
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
if(CURLE_OK == res){
logger.LogError("res value CURLE_OK");
}
/* always cleanup */
curl_easy_cleanup(curl);
}
和curl_easy_perform(curl)的返回值,即res是CURLE_OK但是记录没有在solr的collection1中编入索引,而从终端记录发布以下命令正在编制索引
curl http://192.168.0.164:8983/solr/collection1/update?replacefields=false -H 'Content-type: application/json' -d '[{"id":"4000", "to":"Life is to.", "cc":"unknown ", "subject":"Life"}]'
答案 0 :(得分:0)
您未向cURL提供正确的网址。实际URL -H 'Content-type: application/json' -d '[{\"id\":\"4000\", \"to\":\"Life is to.\", \"cc\":\"unknown \", \"subject\":\"Life\"}]'
之后的所有内容都只是cURL命令行工具的参数,并且不是URL的一部分。
网址选项应仅为http://192.168.0.164:8983/solr/collection1/update?replacefields=false
。其余参数必须设置为自己的curl_easy_setopt
调用。
要将数据设置为POST,请使用CURLOPT_POSTFIELDS。
传递char *作为参数,指向要在HTTP POST操作中发送的完整数据。您必须确保数据的格式符合您希望服务器接收数据的方式。
要设置正确的请求内容类型,请使用CURLOPT_HTTPHEADER。
将指针传递给HTTP标头的链接列表,以传递给HTTP请求中的服务器和/或代理。相同的列表可用于主机和代理请求!
设置完所有选项后,请致电curl_easy_perform
。您可能还希望在Solr服务器上查看日志以查看Solr是否生成异常。您还可以设置CURLOPT_ERRORBUFFER和CURLOPT_VERBOSE以获取有关cURL内部任何故障的更多信息(只要cURL能够发出请求,就会返回CURLE_OK - 但如果服务器返回{则不会更改{ {1}}或400
或服务器端的任何实际错误代码(如果设置了CURLOPT_FAILONERROR除外)。