2012-04-06 4 views
3

Итак, вы работаете с Solr, считывая данные из него, делая что-то для этих данных и сохраняя обновления. Оно работает! Отправим его! Затем (при тестировании, спасибо FSM) вы начинаете получать некоторые нечетные сбои. Иногда это работает, иногда сервер Solr возвращает ошибку 400 или 500. Виски Tango Foxtrot?Solr возвращает HTTP-ошибку 400 или 500

Скажите, что это приложение для книжного магазина. Международный книжный магазин. Итак, у вас есть несколько кодовых страниц. Некоторые названия на испанском языке, некоторые на иврите. Само приложение находится на американском английском языке. Таким образом, ваши имена полей - английский, титры и другой текст на кириллице, или для веселения символов на иврите. Вы заметили, что один (но не все) титулы на иврите вызывает проблемы.

Процесс, за которым вы следуете: Query 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. Конечно, если вы URL-адрес каждый поле, которое вы прочитали из Solr, прежде чем вы его напишете, вы плохо будете его калечить, так как иврит (в нашем примере) будет сохранен в его шестнадцатеричной форме и затем возвращен в этой форме (не как иврит) на будущие запросы.

Solr будет, однако, хранить "&amp;" как «&».

< и> имеют те же проблемы.

+2

так ... в чем ваш вопрос? это просто напыщенная речь? –

+0

Ничего. Здесь так, чтобы другие люди это увидели. Я потратил большую часть времени на это, и надеюсь, что это не позволит другим делать то же самое. Я не могу быть единственным кодером, чья реакция на проблему заключается в том, что «сайт: stackoverflow.com ошибка описания проблемы». – wiredog

+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 вызовет проблемы повсюду.

+0

Да. Это исправило это. Благодаря! – wiredog

+0

Не работает в моей ситуации. – David

Смежные вопросы