2010-09-27 86 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