因此,您正在使用Solr,从中读取数据,对该数据执行操作以及保存更新。有用!装运它!然后(在测试中,感谢FSM)你开始得到一些奇怪的失败。有时它可以工作,有时Solr服务器返回400或500错误。 Whiskey Tango Foxtrot?
说这是一个书店应用程序。国际书店。所以你在这里有多个代码页。有些是西班牙语,有些是希伯来语。该应用程序本身是美国英语。因此,您的字段名称是西里尔语中的英语,标题和其他文本,或者希伯来语中的字符排序乐趣。你注意到希伯来语中的一个(但不是全部)标题引起了问题。
您正在关注的过程是:查询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>
问题出在“摘要”字段中。具体来说,就是“&amp;”。它必须被URL编码为"&"
,否则其后面的单词将被解释为命令,而不是更新的一部分。请注意,它通过查询返回到Solr为“&amp;”而不是"&"
所以你不能只接受从查询返回到Solr的数据,因为它是以更新Solr的正确形式。当然,如果你对每个进行URL编码在你写回来之前你从Solr读取的字段你将会严重破坏它,因为希伯来语(在我们的例子中)将以十六进制形式存储,然后在未来的查询中以该形式(而不是希伯来语)返回。
然而,Solr会将"&"
存储为“&amp;”。
&LT;和&gt;有同样的问题。
答案 0 :(得分: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会给各地带来麻烦。