Solr HTTP Api - статус ответа - PullRequest
0 голосов
/ 02 ноября 2018

При использовании SOLR через свой HTTP Api он отвечает объектом с именем responseHeader, в который он помещает статус ответа

<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">13</int>
        <!-- ... -->
    </lst>
    <!-- ... -->
</response>

Мой первый вопрос: каковы возможные значения атрибута состояния? и каковы их значения? Я знаю, что значение 0 означает успешный вызов.

Мой второй вопрос: Обычно Solr отвечает кодом 200 для успешного вызова. Можем ли мы получить status, отличную от 0 (в случае ошибки), и получить 200 для кода ответа http?

Я использую SOLR 4.6

Nb: Я задал эти вопросы, потому что мой SOLR не индексирует сому коллекций, хотя он не вызывает ошибок, и код ответа 200!

Спасибо

1 Ответ

0 голосов
/ 02 ноября 2018

Код состояния обычно соответствует возвращаемому HTTP-коду, за исключением того, что 200 возвращается как 0. Это реализовано в виде числового кода, когда SolrException выдается внутренне в Solr. Когда это было задано в списке рассылки solr-user некоторое время назад, следующий ответ от Эрика Хэтчера был получен :

Есть ли ссылка на этот статус-код?

Просто исходный код. SolrCore # setResponseHeaderValues, который преимущественно использует коды, указанные в SolrException:

   BAD_REQUEST( 400 ), 
   UNAUTHORIZED( 401 ),  // not currently used 
   FORBIDDEN( 403 ), 
   NOT_FOUND( 404 ), 
   SERVER_ERROR( 500 ), 
   SERVICE_UNAVAILABLE( 503 ), 
   UNKNOWN(0); 

Текущую версию SolrCore можно увидеть на Github .

Вы, вероятно, можете предположить, что код ошибки http большую часть времени будет соответствовать значению status, но, безусловно, есть исключения - например, если HTTP-запрос вообще никогда не достигает Solr, а ошибка просто возвращается Jetty (если установка сильно затруднена, или, возможно, если вы попытаетесь получить доступ к чему-то другому, чем /solr).

В вашем примере запрос может быть совершенно нормальным и нормальным, даже если действие ничего не вызывает при импорте данных в коллекцию. Если ваш запрос на импорт заканчивается в 0 документах, это не является ошибкой - и если импорт начался (импорт обычно является асинхронной операцией), это все еще допустимый и нормальный запрос, даже если конечный результат позже недопустим .

Вероятно, лучше попытаться понять, почему ваш импорт не удается (и использовать для этого отдельный вопрос со всеми необходимыми подробностями о том, как вы пытаетесь индексировать, что говорят любые ошибки в журнале (вы можете настроить журнал уровень в разделе «Вход в веб-интерфейс») и ожидаемый результат) вместо просмотра поля status в ответе.

...