2014-08-27 58 views
2

所以我有以下FQ過濾PARAM一個SOLR查詢:拆分SOLR FQ篩選查詢

(field_name:(1 OR 2 OR 25 OR 33 OR 333 OR 32 OR ...... and 2000 other ORS)) 

所以Solr的有這個最大布爾限制:

<maxBooleanClauses>1024</maxBooleanClauses> 

因此,我別無選擇,只能拆分此查詢並嘗試合併拆分查詢的結果。此外,我對結果進行分頁,因此我只對比賽的前10個文檔感興趣,以及所有結果的總數。

問題是...搜索對象與field_name屬性具有一對多關係。因此,solr文檔可以有多個field_name值....現在在原始查詢中,這將全部用SOLR OR語句很好地解決....但是,如果我分開OR並執行3個單獨的查詢,由於此一對多關係,某些文檔會被多個查詢返回。因此,我不能只爲每個查詢添加numResult以獲得實際的聚合numResult,而且返回的文檔通常會被多個查詢返回。

我該如何解決這個難題,我該如何操作這個將相同的結果(返回相同的文檔,具有相同的總體結果)與原始未分割查詢分割成3個單獨的查詢後

+1

爲什麼不增加'maxBooleanClauses'?還使用POST請求,以便數據通過服務器。 – arun 2014-08-27 23:11:10

+0

另請參閱http://stackoverflow.com/questions/16201195/is-there-a-size-or-term-limit-for-a-solr-query-string-when-using-http-post – arun 2014-08-27 23:12:30

回答

3

一個簡單的解決方案是編輯schema.xml並增加maxBooleanClauses

<maxBooleanClauses>4096</maxBooleanClauses> 

如果由於某種原因,你不想增加maxBooleanClauses,您可以加入條件的羣體單一的條款產生較少的條款單個查詢。

例如,假設您的maxBooleanClauses等於4.此外,假設您有以下查詢:

1 OR 2 OR 3 OR 4 OR 5 OR 6 OR 7 OR 8 OR 9 

首先,你可以刪除OR是因爲Solr的使用一個OR默認反正。二,讓你的查詢被修改爲連續三個學期每一三元組合成一個單一的條款:

(1 2 3) (4 5 6) (7 8 9) 

原來的過濾器查詢相當於修改一個。爲了將長查詢轉換成等效(至多)y長整型查詢,請加入ceil(x/y)組。