我正在使用 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: Cannot parse '[my query here...]
在 Solr 查询中我可以 OR 一起的 id 数量是否有限制?当我超过 1000 时,还有其他原因可能会失败吗?我已经尝试过了,它在 1024 左右失败(我的 id 长度几乎都一样),所以这似乎表明存在字符或期限限制。
或者,如果有人对我如何以另一种更智能的方式检索我正在寻找的项目有很好的建议,我很想听听。我的备份解决方案只是查询 Solr 的所有项目,解析结果,并使用属于我感兴趣的集合的那些。我不想这样做,因为数据源可能有数万个项目,这将是低效的。