PHP Solr客户端 - 请求实体太大

时间:2011-09-26 18:54:02

标签: php apache lucene solr

我正在使用SOLR PHP客户端从solr服务查询数据。我的代码看起来与下面类似,因为我传递了一个查询来搜索多个ID(在我的情况下,很多)。当我一次搜索太多ID时,问题就出现了。传入太多ID时,我得到“请求实体太大”。有办法解决这个问题吗?从我在各种示例中看到的,语法似乎是'id:1 OR id:2 OR id:3 etc.搜索多个值时。这有不同的语法可以减少传递给服务的请求的大小?例如在SQL中我们可以说'id in(1,2,3,etc。)'。我们可以为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 个答案:

答案 0 :(得分:3)

Solr支持搜索POST HTTP请求而不是GET请求,这将允许您拥有更大的查询。我不知道如何在您正在使用的PHP客户端中启用它。

然而,这只是一个绑带。真正的问题是你似乎在滥用Solr。您可能会遇到其他限制和性能问题,因为Solr不是为了做您想做的事情而设计的。您不会使用PHP编写操作系统,对吧?它也是如此。

我建议您使用真正的问题创建一个新问题,以便您运行此类查询。

答案 1 :(得分:1)

Solr支持范围查询,即id:[1到10],或id:[* TO *]以匹配所有。由于看起来许多“OR”与顺序ID有关,因此这应该有所帮助。