我正在使用Datastax Enterprise和DSE Search(Cassandra上的SolR)编写应用程序。
我的问题是我需要生成schema.xml并动态地使用Java向SolR发送solrconfig.xml和schema.xml。不使用curl。
我尝试使用Commons HttpComponents,但插入cassandra表的solrconfig.xml文件不正确。在XML文件开头之前插入了Http相关数据,如下所示:
��:
solr_adminsolr_resourcesresource_value��--9NDJNu2AW4jtIyX6ggQAgEqI3FXp3JpDZ6
Content-Disposition: form-data; name="solrconfig.xml"; filename="solrconfig.xml"
Content-Type: application/xml; charset=ISO-8859-1
Content-Transfer-Encoding: binary
<config>
<!-- In all configuration below, a prefix of "solr." for class names
is an alias that causes solr to search appropriate packages,
including org.apache.solr.(search|update|request|core|analysis)
[Continued...]
当然SolR在尝试读取此配置时失败。
有人知道如何以编程方式将这两个文件从java发送到SolR吗?
提前感谢您的回答。
答案 0 :(得分:0)
使用HttpClient的HTTP Post应该可以工作。 schema.xml文件可能指的是需要上载的其他文件。你能查一下DSE system.log吗?您能否验证HTTP Post是否可以使用其他schema.xml文件?
答案 1 :(得分:0)
我终于找到了做到这一点的方法。 我看了Solandra的测试,发现他们是如何向solr发送文件的。
URL url = new URL("http://hostname:port/solr/resource/solrksname.tablename/schema.xml");
// write
try {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(builder.toString());
wr.flush();
wr.close();
System.out.println("Schema insert response code : " + conn.getResponseCode());
} catch (IOException e) {
e.printStackTrace();
}
响应代码为200,检查返回正确的模式,solr admin中没有错误,并且在创建solr core时没有错误。不知道我第一次怎么做错了,方法是使用基本的HttpURLConnection并使用输出流编写器传输数据。不需要HttpCommons。