gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:19:59 25 4
gpt4 key购买 nike

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

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

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 个 ID,它就会成功,并且我会按照预期返回结果。但是,如果我增加查询以包括我真正感兴趣的所有 1500 个,我会收到一个 HTTP 400 响应代码,并出现以下错误:

HTTP/1.1 400 org.apache.lucene.queryParser.ParseException: 无法解析 '[我的查询...]

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

或者,如果有人对我如何以另一种更智能的方式检索我正在寻找的项目有很好的建议,我很想听听。我的备份解决方案只是查询 Solr 的所有项,解析结果,并使用属于我感兴趣的集合的那些。我不想这样做,因为数据源可以有几万条数据,效率很低。

最佳答案

Solr 端没有限制 - 我们经常以类似的方式使用 Solr,查询中有数万个 ID。

您需要查看 servlet 容器(Tomcat、Jetty 等)的设置并增加最大 POST 大小。如果您使用的是 Tomcat,请查找 maxPostSize;如果您使用的是 Jetty,请查找 maxFormContentSize

关于java - 使用 HTTP POST 时,Solr 查询字符串是否有大小或期限限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16201195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com