当前位置: 首页 > 面试题库 >

使用HTTP POST时,Solr查询字符串是否有大小或字词限制?

汪博达
2023-03-14
问题内容

我正在使用Java查询Solr服务器以获取结果,这些结果的ID在我感兴趣的一组已知ID中。

我想获得这些我感兴趣的结果的最佳方法是创建一个长查询字符串,看起来像这样:

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

queryString在发出请求之前生成了String,并且我最终想要发出的请求中包含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个id,它将成功执行,并且可以按预期返回结果。但是,如果我增加查询以包括我真正感兴趣的所有1500个查询,则会收到HTTP
400响应代码,并显示以下错误:

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

Solr查询中可以或在一起的ID数量是否有限制?当我超过1000时,还有其他原因可能会失败吗?我已经尝试过,但它在1024左右失败(我的ID几乎都具有相同的长度),因此似乎表明存在字符或字词限制。

或者,如果有人对我如何以另一种更聪明的方式检索想要的物品有很好的建议,我很想听听。我的备份解决方案只是查询Solr中的 所有
项目,解析结果并使用属于我感兴趣的集合的项目。我不希望这样做,因为数据源可能有成千上万的项目,这将是低效率的。


问题答案:

Solr方面没有限制-我们经常以类似的方式在查询中使用成千上万个ID来使用Solr。

您需要查看Servlet容器(Tomcat,Jetty等)的设置,并增加最大POST大小。查找maxPostSize是否正在使用Tomcat,以及maxFormContentSize是否正在使用Jetty。



 类似资料:
  • 问题内容: 我的Node.js应用程序的一部分涉及从用户接收字符串作为输入并将其存储在JSON文件中。JSON本身显然对此没有限制,但是Node可以处理成JSON的文本量是否有上限? 请注意,我 并未 在实际插入中使用MongoDB或任何其他技术-这是本机字符串化,并使用将其保存到.json文件。 问题答案: V8(JavaScript引擎节点在建),直到 非常 最近有一个关于1.9 GB的堆大小

  • 问题内容: 我有一个字符串定义为 字串xx 我可以分配的字符数有限制吗? 2)我正在将用户输入分配给此字符串xx。70%的人只说一个字。有时他们会说一个大句子,所以想知道可以吗?还是有更好的Java做法? 问题答案: 您可能已经搜索过一个常见问题,但无论如何我都会再次回答。 我可以分配的字符数有限制吗? 它的Integer.MAX_VALUE或2 ^ 31-1或大约20亿。在达到此大小之前,您更有

  • 检查字符串是否小写。 将给定的字符串转换为小写,使用 String.toLowerCase() 并将其与原始值进行比较。 const isLowerCase = str => str === str.toLowerCase(); isLowerCase('abc'); // true isLowerCase('a3@$'); // true isLowerCase('Ab4'); // fals

  • 问题内容: 我来自php背景,在php中,有一个函数可以告诉您数组中使用了多少个元素。 数组有类似的方法吗?谢谢。 问题答案: 是的(类属性,而不是方法):

  • 我有一个随机地址字符串,如 我想将其拆分为具有两个条件的字符串数组: 该字符串数组的每个元素的长度小于或等于20 字符串数组的元素没有尴尬的结尾 例如,每20个字符拆分将产生: 但正确的输出是: 注意字符串数组中的每个元素是如何小于或等于20的。 以上是我对这段代码的输出:

  • 问题内容: 我想创建一个函数来检查字符串的首字母是否大写。到目前为止,这是我想出的: 当我尝试运行它时,出现此错误: 有人可以看看并告知我在做什么错吗? 问题答案: 为什么不使用;