【问题标题】:Solr search for lots of valuesSolr 搜索大量值
【发布时间】:2010-09-27 09:06:18
【问题描述】:

我正在使用 Solr 搜索一长串 ID,如下所示:

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>

我可以将查询拆分为几个小查询,但这会阻止我对结果进行排序。一定有更合适的方法吗?

【问题讨论】:

  • 恕我直言,这里真正的问题是导致您需要这样做的情况。
  • 我不得不同意 Mauricio,这听起来像是一个 SQL 类型的查询......或者一个 NoSQL 解决方案,而不是一个全文模糊匹配搜索引擎真的会摇滚......
  • 我同意,但遗憾的是这不是我可以改变的。我没有创建系统,我只需要修复它。

标签: search lucene solr


【解决方案1】:

您应该使用 Lucene 过滤器,而不是构建庞大的布尔查询。尝试使用FieldCacheTermsFilter 并将该过滤器传递给您的搜索器。 FieldCacheTermsFilter 会将您的 UID 转换为 Lucene DocIdSet,它会很快完成,因为它是通过 FieldCache 完成的。

【讨论】:

  • 可以通过http查询api使用FieldCacheTermsFilter吗?怎么样?
猜你喜欢
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
相关资源
最近更新 更多