Datastax DSE Search:如何使用java发布solrconfig.xml和schema.xml?

时间:2014-06-18 22:28:34

标签: java solr cassandra datastax-enterprise datastax

我正在使用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吗?

提前感谢您的回答。

2 个答案:

答案 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。