因此,您正在使用 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 编码为"&"
,否则它后面的单词将被解释为命令,而不是更新的一部分。请注意,它是由对 Solr 的查询返回为“&”而不是作为"&"
所以您不能只接受从查询返回到 Solr 的数据,因为它是更新 Solr 的正确格式。 当然,如果您在写回之前对从 Solr 读取的每个字段进行 URL 编码,您将严重破坏它,因为希伯来语(在我们的示例中)将以十六进制形式存储,然后以该形式返回(而不是希伯来语)关于未来的查询。
但是,Solr 将存储"&"
为“&”。
< 和 > 有同样的问题。