0

我有一个包含 600.000 个文档的 Solr-Servlet,每个文档包含大约 10-30 个多值字段。为了更新文档,我遇到了一些问题,因为 Solr 在 3.6 版中没有任何更新功能。我想做的事情:我想做的事情:我想要一个应用程序,它只需要应该插入到文档中的字段。例如:

文档 1(字段 1 / 值 1,字段 2 / 值 2)

我想在这个文档中插入一个 field3 / value3。现在,有必要这样做:

文档 1(字段 1 / 值 1,字段 2 / 值 2,字段 3 / 值 3)

每个文档中的字段数量较多的原因,我只想添加 field3 / value3,而不需要编写知道所有其他字段,如上图所示:

文档 1(字段 3 / 值 3)

这就是为什么我编写了一个应用程序,它首先自动从 Solr 获取所有数据,然后添加一个应该插入到文档中的字段。一切都很顺利,直到我处理文档,其中字段的值如 'ä' 'ö' 'ü' 等等。Solr 比返回错误:

org.apache.solr.common.SolrException:无效的 UTF-8 起始字节 0xfc

我想通了,这是由上面张贴的字符引起的。因此我想知道我的输入流是哪种编码(我为此使用了juniversalchardet),它指出编码是WINDOWS-1252。我的应用程序是用 Java 编写的,没有任何 Solr 库(只有标准的 http 库和用于 xml 处理的 javax)。您知道编码更改的位置以及如何避免它吗?是 Java 还是它,因为 servlet 在 Windows 机器上运行?

谢谢你的帮助!

编辑:我应该使用 Solrj 库吗?有谁知道这是否可以避免我的问题?

4

1 回答 1

0

经过一番研究,我发现了我的问题,我想把它分享给所有可能有同样问题的人。输入流似乎取决于您正在运行的系统。正如您可能猜到的,我使用的是 Windows 机器。您唯一需要做的就是将您的输出流设置为 UTF-8,Solr 将使用它来重新索引您的文档。我使用了 FileOutputStream,因为我需要记录更改。所以我缺少的代码是:

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("Updatefiles/"+uuid+".xml"),"UTF-8");

您可以选择几乎所有流的编码。我不知道这个参数,所以对于所有将面临这个问题的人 -> 只需设置输出流的编码。

于 2012-08-31T11:44:32.863 回答