2015-05-04 101 views
0

我已阅读http://solr.pl/en/2011/12/19/do-i-have-to-look-for-maxbooleanclauses-when-using-filters/Too many boolean clauses exception in solr搜索Solr的大量具体文档

我的Solr有大约200万份文档。我可以通过设置查询或筛选特定文档的ID来检索特定文档。通过这样做,我可以在这些特定文档中找到方面和集群。我设置的查询是:

ID:1234567或ID:1234567或ID:2345678 ...

然而,当我有,说200个的具体文件,Solr的抱怨说我的查询有太多的布尔条款。我应该简单地增加maxBooleanClauses,还是应该为这种查询提供另一种方法?

+1

如何动态的ID列表?当文件被插入时,它是否可以预生成(即,文件是否可以标记为“属于xyz”)?集体所有权变更的频率如何(意思是说,您可以在所有权变更时重新索引所需文件)? – MatsLindh

+0

ID列表非常动态。在这一秒中,我可能会对这1000个文档感兴趣。在下一秒,我可能会对另外1000个文档感兴趣。我很欣赏你使用标签的方法。但是,可能会有一些同时进行的搜索来使标签方法变得困难。 – user3390906

+0

索引是否分发,或者它是否位于一台服务器上?您可以尝试创建临时集合,将ID索引为该集合的单独文档,然后加入原始集合以检索文档。 – MatsLindh

回答

0

我有同样的问题太多布尔条款例外solr。 你有文件的ID,我有ACL IDS(访问控制列表)

步骤我已经采取措施来解决这个问题是

  1. 增加maxBooleanCLauses
  2. 使用的在过滤器查询为& FQ = ACL:(ID1或ID2 ...)
  3. 如果ACL的计数大于8000然后我发送多个请求与下面逻辑

    StringBuilder的阙ryString = new StringBuilder(5000); (acls.length> 8000){ Integer aclCounter = 0; long requestCnt = Math.round(Math.ceil((acls.length/8000.0)));对于(int i = 0; i < requestCnt; i ++){ queryString = new StringBuilder(acls.length * 10); queryString.append( “& FQ = ACL :(”);用于 (INT J = 0;Ĵ & aclCounter < acls.length; aclCounter ++,J ++){ queryString.append(ACL的[aclCounter])。 append(APPEND_OR); } queryString.replace(queryString.length() - 4,queryString.length(),“)”); //建立Solr的要求,把它获得响应 }}