Клиент PHP Solr - слишком большой объект запроса - PullRequest
1 голос
/ 26 сентября 2011

Я использую клиент SOLR PHP для запроса данных из службы solr. Мой код выглядит примерно так: я передаю запрос для поиска по нескольким идентификаторам (в моем случае, много). Проблема возникает для меня, когда я ищу слишком много идентификаторов одновременно. Я получаю «Request Entity Too Large», когда передаю слишком много ID. Есть ли способ обойти это? Из того, что я вижу в различных примерах, синтаксис выглядит так: «id: 1 ИЛИ id: 2 ИЛИ id: 3 и т. Д.» при поиске по нескольким значениям. Это другой синтаксис, который уменьшит размер запроса, передаваемого в службу? например В SQL мы можем сказать: «id in (1,2,3 и т. Д.)». Можем ли мы сделать что-то подобное для запроса SOLR?

<?php  
  require_once( 'SolrPHPClient/Apache/Solr/Service.php' );  
  $solr = new Apache_Solr_Service( 'localhost', '8983', '/solr' );    

  $offset = 0;
  $limit = 10;

  $queries = array(
    'id: 1 OR id: 2 OR id:3 OR id:4 OR id:5 OR id:6 or id:7 or id:8'  // in my case,       this list keeps growing and growing
    );

  foreach ( $queries as $query ) {
  $response = $solr->search( $query, $offset, $limit );

  if ( $response->getHttpStatus() == 200 ) { 
     print_r( $response->getRawResponse() );
  }
  else {
     echo $response->getHttpStatusMessage();
  }
 }
?>

Ответы [ 2 ]

3 голосов
/ 27 сентября 2011

Solr поддерживает поиск по HTTP-запросам POST, а не GET-запросам, что позволит вам получить намного больший запрос.Я не знаю, как включить это в клиенте PHP, который вы используете.

Однако это только бинты.Настоящая проблема в том, что вы, кажется, неправильно используете Solr.Скорее всего, вы столкнетесь с другими ограничениями и проблемами с производительностью просто потому, что Solr не предназначен для того, что вы пытаетесь сделать.Вы бы не использовали PHP для написания операционной системы, верно?С этим тоже самое.

Я рекомендую создать новый вопрос с проблемой real , которая привела вас к выполнению запросов такого типа.

1 голос
/ 26 сентября 2011

Solr поддерживает запросы диапазона, т. Е. Идентификатор: [1–10] или идентификатор: [* TO *], чтобы соответствовать всем. Поскольку похоже, что многие ваши «ИЛИ» относятся к последовательным идентификаторам, это должно помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...