2010-09-27 93 views
3

的我使用Solr的搜索ID的,像這樣一個長長的清單:Solr的搜索地段值

ID:("4d0dbdd9-d6e1-b3a4-490a-6a9d98e276be" 
    "4954d037-f2ee-8c54-c14e-fa705af9a316" 
    "0795e3d5-1676-a3d4-2103-45ce37a4fb2c" 
    "3e4c790f-5924-37b4-9d41-bca2781892ec" 
    "ae30e57e-1012-d354-15fb-5f77834f23a9" 
    "7bdf6790-de0c-ae04-3539-4cce5c3fa1ff" 
    "b350840f-6e53-9da4-f5c2-dc5029fa4b64" 
    "fd01eb56-bc4c-a444-89aa-dc92fdfd3242" 
    "4afb2c66-cec9-8b84-8988-dc52964795c2" 
    "73882c65-1c5b-b3c4-0ded-cf561be07021" 
    "5712422c-12f8-ece4-0510-8f9d25055dd9"...etc 

這個工程到一個點,而是具有一定規模的失敗,與消息:太多的布爾語從句。您可以增加solrconfig.xml中的極限,但這隻會把它至今 - 我所期望的限制是有原因的:

<maxBooleanClauses>1024</maxBooleanClauses> 

我可以在查詢分割成幾個小傢伙,但會阻止我對結果進行排序。必須有更合適的方法來做到這一點?

+0

恕我直言,這裏真正的問題是導致你需要這樣做的情況。 – 2010-09-27 13:23:58

+1

我有點不得不同意Mauricio,這聽起來像一個SQL類型的查詢...或者一個NoSQL解決方案,與全文模糊匹配搜索引擎真的要在... – 2010-09-27 15:43:46

+0

我同意,但遺憾的是它不是我可以改變的東西。我沒有創建系統,我只需要修復它。 – 2010-09-28 12:27:12

回答

6

您應該使用Lucene過濾器,而不是構建巨大的布爾查詢。嘗試使用FieldCacheTermsFilter並將該過濾器傳遞給您的搜索器。 FieldCacheTermsFilter會將您的UID轉換爲Lucene DocIdSet,並且它會通過FieldCache執行快速操作。

+0

+1就是這樣 – 2010-09-27 15:31:26

+1

我可以通過http查詢api使用FieldCacheTermsFilter嗎?怎麼樣? – 2013-05-06 08:42:40