3

因此,您正在使用 Solr,从中读取数据,对该数据执行操作,并保存更新。有用!装运它!然后(在测试中,感谢 FSM)你开始遇到一些奇怪的故障。有时它有效,有时 Solr 服务器返回 400 或 500 错误。威士忌探戈狐步舞?

假设它是一个书店应用程序。国际书店。所以这里有多个代码页。有些标题是西班牙语,有些是希伯来语。该应用程序本身是美式英语。因此,您的字段名称是英文、西里尔文的标题和其他文本,或者是希伯来文的字符排序乐趣。您注意到希伯来语中的一个(但不是全部)标题引起了问题。

您遵循的过程是:查询 Solr 以获取记录、更新记录并将整个记录写回 Solr。您正在将“计数”字段从“5”更新为“4”。一些标题更新,一些失败。谷歌搜索揭示了各种可能的红鲱鱼:它是字节顺序标记问题吗?UTF8 控制字符?配置错误?也许。但。

给定一个看起来像这样的文档更新:

<add>
  <doc>
    <field name="StockNumber">1</field>
    <field name="Count">5</field>
    <field name="Title">רוקד עם זאבים</field>
    <field name="Translated_Title">Dances With Smurfs</field>
    <field name="Summary">Our Hero goes to another place, bonds with the Odd Looking Natives, & saves the day.</field>  
  </doc>
</add>

问题出在“摘要”字段中。具体来说,“&”。它必须被 URL 编码为"&amp;",否则它后面的单词将被解释为命令,而不是更新的一部分。请注意,它是由对 Solr 的查询返回为“&”而不是作为"&amp;" 所以您不能只接受从查询返回到 Solr 的数据,因为它是更新 Solr 的正确格式。 当然,如果您在写回之前对从 Solr 读取的每个字段进行 URL 编码,您将严重破坏它,因为希伯来语(在我们的示例中)将以十六进制形式存储,然后以该形式返回(而不是希伯来语)关于未来的查询。

但是,Solr 将存储"&amp;"为“&”。

< 和 > 有同样的问题。

4

1 回答 1

1

尝试从您的客户端应用程序发送 CDATA 标记之间的所有内容。喜欢:

<add>
  <doc>
    <field name="StockNumber"><![CDATA[1]]></field>
    <field name="Count"><![CDATA[5]]></field>
    <field name="Title"><![CDATA[רוקד עם זאבים]]></field>
    <field name="Translated_Title"><![CDATA[Dances With Smurfs]]></field>
    <field name="Summary"><![CDATA[Our Hero goes to another place, bonds with the Odd Looking Natives, & saves the day.]]></field>  
  </doc>
</add>

当然整数字段不是必需的,但是如果您从应用程序动态构造文档,使用它总是更容易。

唯一的警告是确保文本不包含 CDATA 标记。双CDATA会到处惹麻烦。

于 2012-04-06T18:59:33.983 回答