3

つまり、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エンコードされている必要があります"&amp;"。そうでない場合、それに続く単語は、更新の一部としてではなく、コマンドとして解釈されます。Solrへのクエリによって「&」として返されるのではなく「&」として返されることに注意してください。"&amp;" したがって、Solrを更新するための適切な形式であるとして、Solrへのクエリから返されたデータを受け入れることはできません。 もちろん、書き戻す前にSolrから読み取ったすべてのフィールドをURLエンコードすると、ヘブライ語(この例では)が16進形式で格納され、その形式(ヘブライ語ではない)で返されるため、ひどく混乱します。将来のクエリについて。

ただし、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 に答える