【问题标题】:Datastax DSE Search : How to post solrconfig.xml and schema.xml using java?Datastax DSE 搜索:如何使用 java 发布 solrconfig.xml 和 schema.xml?
【发布时间】:2014-08-09 08:47:59
【问题描述】:

我正在使用 Datastax Enterprise 和 DSE Search(Cassandra 上的 SolR)编写应用程序。

我的问题是我需要生成 schema.xml 并使用 Java 动态地将 solrconfig.xml 和 schema.xml 发送到 SolR。不使用 curl。

我尝试使用 Commons HttpComponents 执行此操作,但插入 cassandra 表的 solrconfig.xml 文件不正确。 Http 相关数据插入到 XML 文件开头之前,如下所示:

��:
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 吗?

提前感谢您的回答。

【问题讨论】:

  • 使用 HttpClient 不起作用(从 cassandra blob 读取)。使用 SolrJ 创建核心不起作用(抱怨缺少文件)。 ContentStream 请求失败并出现 500 错误 HttpSolrServer server = new HttpSolrServer(solrUrl); ContentStreamUpdateRequest req= new ContentStreamUpdateRequest("/resources/"+solrKeyspace + "." + datasetName + "/"); req.addContentStream(new ContentStreamBase.FileStream(new File("solrconfig.xml"))); server.request(req); server.commit();返回非正常状态:500,消息:内部服务器错误

标签: java solr cassandra datastax-enterprise datastax


【解决方案1】:

使用 HttpClient 的 HTTP Post 应该可以工作。也许 schema.xml 文件是指其他需要上传的文件。您可以查看 DSE system.log 吗?您能否验证 HTTP Post 是否适用于不同的 schema.xml 文件?

【讨论】:

  • schema.xml 中没有任何文件的引用。在解释文件时这不是问题,只是解析器在第一行停止,因为文件不正确。您能否分享一个将架构和 solrconfig 上传到 DSE 搜索的代码示例,好吗? (也许是一段代码来加载 cassandra 表中的模式或 solrconfig 文件 blob?
【解决方案2】:

我终于找到了方法。 我查看了 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 核心时也没有错误。不知道我第一次怎么做错了,方法是使用基本的 HttpURLConnection 和带有输出流编写器的流数据。不需要 HttpCommons。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2020-07-28
    • 2016-09-15
    • 2020-12-20
    • 2014-08-09
    • 1970-01-01
    相关资源
    最近更新 更多