是否有一个大小或年限,在使用HTTP POST一个Solr的查询字符串?(Is there a si

2019-09-01 02:02发布

我使用Java来查询该有一组我感兴趣的已知的ID内的ID结果的Solr服务器。

我能想到的最好的办法让这些只是结果我感兴趣的是建立一个长期的查询字符串看起来是这样的:

q=(item_id:XXX33-3333 OR item_id:YYY42-3445 OR item_id:JFDE-3838)

我生成这个字符串, queryString ,使我的请求之前,有列入我希望最终使请求超过1500这样的id。 我使用的是HTTP POST进行查询这样:

        HttpPost post = new HttpPost(url);
        post.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

        StringEntity entity = new StringEntity(queryString, "UTF-8");
        entity.setContentType("application/x-www-form-urlencoded; charset=utf-8");
        post.setEntity(entity);

        HttpClient client = new DefaultHttpClient();
        HttpResponse response = client.execute(post);

如果我限制查询到只是第1000个IDS,它成功,我得到的结果早在我所期望的。 但是,如果我增加查询到包括我真正感兴趣的所有1500年,我得到了以下错误的HTTP响应400的代码:

HTTP/1.1 400 org.apache.lucene.queryParser.ParseException: Cannot parse '[my query here...]

是否有IDS,我能够或者一起在一个Solr的查询的数量限制吗? 难道还有其他原因,当我去过去的1000,这可能是失败的? 我已经尝试,它在1024左右失败(我的ID是几乎一样的长度),所以它似乎暗示有一个人物或任期限制。

或者,如果有人有我怎么能找回我的另一寻找项目的好建议,更聪明,这样,我很想听到它。 我的备份解决方案,只是查询Solr的所有项目,分析结果,并使用属于集合我感兴趣的人。我不希望这样做,因为数据来源可能有一个项目数以万计,这将是低效的。

Answer 1:

有对Solr的一侧没有限制 - 我们经常以类似的方式在查询中使用的Solr使用标识数以万计。

你需要看看你的servlet容器(Tomcat的,码头等)的设置和增加最大POST大小。 查找maxPostSize如果您正在使用Tomcat和maxFormContentSize如果您使用的码头。



Answer 2:

作为Solr的6.0的存在maxBooleanClauses内Solr的配置-默认为1024。

我写一个单元测试,以确认和证实限制(使用Solr 5.3)。

查看更多在这里https://wiki.apache.org/solr/SolrConfigXml#The_Query_Section

FWIW有一个开放的Solr JIRA删除它,所以它可能在将来被删除https://issues.apache.org/jira/browse/SOLR-4586



文章来源: Is there a size or term limit for a Solr query string when using HTTP POST?