つまり、Solrを使用してデータを読み取り、そのデータに対してDoing Thingsを実行し、更新を保存していることになります。できます!それを出荷!次に(テストでは、FSMに感謝します)、いくつかの奇妙な失敗が発生し始めます。動作する場合もあれば、Solrサーバーが400または500エラーを返す場合もあります。ウイスキータンゴフォックストロット?
書店のアプリだとしましょう。国際的な書店。したがって、ここには複数のコードページがあります。スペイン語のタイトルもあれば、ヘブライ語のタイトルもあります。アプリ自体はアメリカ英語です。したがって、フィールド名は英語、キリル文字のタイトルやその他のテキスト、またはヘブライ語での文字の順序付けを楽しむためのものです。ヘブライ語のタイトルの1つ(すべてではない)が問題を引き起こしていることに気づきました。
次のプロセスは次のとおりです。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エンコードすると、ヘブライ語(この例では)が16進形式で格納され、その形式(ヘブライ語ではない)で返されるため、ひどく混乱します。将来のクエリについて。
ただし、Solrは"&"
「&」として格納します。
<と>にも同じ問題があります。