2015-02-10 185 views
0

当我用“*”查询SOLR时,我想知道我可以从solr收到的最大物品是多少。SOLR响应大小限制

我发送2个查询,在一个请求124K行,并在一个125K,125K失败,我想明白为什么。在SOLR登录

http://localhost:8983/solr/select?%22start=0&rows=125000&q=*&fl=UniqueId,%20entity_id,%20data_unit_id,%20score&wt=tcp&host=10.175.2.127&port=8985&queryId=4&qt=standard&debugQuery=false%22 

我收到以下错误我无法找到任何东西:

HTTP ERROR 500 

Problem accessing /solr/select. Reason: 

{trace=java.lang.NullPointerException 
,code=500} 

当我运行查询:

http://localhost:8983/solr/select?%22start=0&rows=124000&q=*&fl=UniqueId,%20entity_id,%20data_unit_id,%20score&wt=tcp&host=10.175.2.127&port=8985&queryId=4&qt=standard&debugQuery=false%22 

我得到很好的响应:

<response> 
<lst name="responseHeader"> 
<int name="status">0</int> 
<int name="QTime">6383</int> 
<lst name="params"> 
<str name="port">8985</str> 
<str name="debugQuery">false"</str> 
<str name="host">10.175.2.127</str> 
<str name="fl">UniqueId, entity_id, data_unit_id, score</str> 
<str name="q">*</str> 
<str name="queryId">4</str> 
<str name="qt">standard</str> 
<str name="wt">tcp</str> 
<str name=""start">0</str> 
<str name="rows">124000</str> 
</lst> 
</lst> 
<result name="response" numFound="0" start="0" maxScore="0.0"/> 
</response> 

SOLR Log发送125K行时错误的查询:

INFO - 2015-02-10 10:26:40.122; org.apache.solr.core.SolrCore; [collection1] webapp=/solr path=/select params={port=8985&debugQuery=false"&host=10.175.2.127&fl=UniqueId,+entity_id,+data_unit_id,+score&q=*&queryId=4&qt=standard&wt=tcp&"start=0&rows=125000} hits=1320877 status=500 QTime=1420 
ERROR - 2015-02-10 10:26:40.123; org.apache.solr.common.SolrException; null:org.apache.solr.common.SolrException: java.lang.RuntimeException: Invalid version (expected 2, but 60) or the data in not in 'javabin' format 
at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:302) 

设计是发送HTTP请求和响应读取的TcpClient,StreamReader的和NetworkSteam(C#),我不明白阅读,因为异常响应发送时被抛出HttpWebRequest。

+0

您能否提供有关NPE的日志? – Mysterion 2015-02-10 09:00:43

+0

在响应中您会得到一个名为'numFound'的值。这包含通过执行搜索匹配的文档总数。这是你需要的吗? – cheffe 2015-02-10 09:20:41

+0

@cheffe当我查询125k行时,我没有得到回应。 – ilansch 2015-02-10 09:22:45

回答

1

通常将设置为该大数字是非常糟糕的做法。对于大多数应用程序 - 它应该在批处理中完成,例如rows = 50,并且在迭代结果时更改开始

这是一个非常不好的做法,因为复杂性获得的ň文件顶部ķ文档需要O(K *的log(n))和你的情况ň =所有文档的数量,K - 是参数。