【问题标题】:Encoding problems while getting data from Solr Servlet从 Solr Servlet 获取数据时出现编码问题
【发布时间】:2012-08-22 17:13:57
【问题描述】:

我有一个包含 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 库吗?有谁知道这是否可以避免我的问题?

【问题讨论】:

  • 您使用的编码取决于您的平台。您能否发布您用于提交文档的代码和带有错误的 solr 日志文件?

标签: java utf-8 solr


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    相关资源
    最近更新 更多