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的要求,把它獲得響應 }}