我有一个包含600,000个文档的Solr-Servlet,每个文档包含大约10-30个多值字段。为了更新文档,我遇到了问题,因为Solr在版本3.6中没有任何更新功能。我想做什么:我想做:我想要一个只需要字段的应用程序,应该插入到文档中。例如:
Document1(field1 / value1,field2 / value2)
我想在此文档中插入field3 / value3。目前,有必要这样做:
Document1(field1 / value1,field2 / value2,field3 / value3)
每个文档中字段数量很多的原因,我只想添加field3 / value3,而不需要写出如上所示的所有其他字段:
Document1(field3 / value3)
这就是为什么我编写了一个应用程序,它首先自动从Solr获取所有数据,然后添加一个应该插入到文档中的字段。一切顺利,直到我使用文档,其中字段具有'ä'''''ü'等值。 Solr比返回错误:
org.apache.solr.common.SolrException:无效的UTF-8起始字节0xfc
我发现,这是由上面发布的字符引起的。因此,我想知道我的输入流是哪个编码(我使用了juniversalchardet),并指出编码是WINDOWS-1252。我的应用程序是用Java编写的,没有任何Solr库(只是标准的http库和用于xml处理的javax)。您是否知道编码的更改位置以及如何避免编码?它是Java还是它,因为servlet在Windows机器上运行?
感谢您的帮助!
编辑:我应该使用Solrj库吗?有谁知道这是否可以避免我的问题?
答案 0 :(得分:0)
经过一番研究后,我发现了我的问题,我想为所有可能遇到同样问题的人分享。输入流似乎取决于您正在运行的系统。你可能猜到,我正在使用Windows机器。您唯一需要做的就是将输出流设置为UTF-8,Solr将使用它来重新索引您的文档。我使用了FileOutputStream,因为我需要记录更改。所以我遗失的代码是:
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("Updatefiles/"+uuid+".xml"),"UTF-8");
您可以选择几乎所有流的编码。我不知道这个参数,所以对于所有将面临这个问题的人 - >只需设置输出流的编码。