2010-05-25 37 views
7

我正在使用Solr,并且我想面向一个字段“组”。Solr如何在大量方面值上进行缩放?

由于“组”是由用户创建的,因此“组”可能会有大量的值。

  • Solr能够处理这样的用例吗?或者Solr不适合具有大量值的分面?

  • 据我所知,我可以设置facet.limit来限制为facet字段返回的值的数量。这对我的情况有帮助吗? 假设我将facet.limit设置为50,那么在搜索中有10万个“group”匹配值。如果加快查询速度,或者查询仍然很慢,因为Solr仍然需要处理并排序所有方面价值观并返回前50名?

  • 有关如何调整Solr以获取大量方面值的任何提示?

谢谢。

回答

7

从1.4开始,solr处理具有大量值的构面,因为它默认使用简单的构面计数。 (facet.method默认为'fc')。

在1.4之前,solr使用了一种基于过滤器的分面方法(enum),对于具有少量值的属性来说,这种方法明显更快。此方法每个方面值需要一个过滤器。

关于facet.limit,可以将其看作是通过facet空间(与facet.offset一起)导航的方式,就像使用行/偏移量在结果空间中导航一样。所以10〜50的值是明智的。

与行/偏移一样,并且由于Solr的性质,当偏移量变大时,可以预期facet.limit/facet.offset的性能会降低,但如果保持在合理的范围内边界。

默认情况下,solr首先输出更频繁的facet。

综上所述:

  • 使用Solr的1.4

  • 确保facet.method为 'FC'(当然,这是默认反正)。

  • 使用facet.limit/facet.offset浏览您的facet空间。

1

不要misregard启用缓存刻面相关的参数(尝试不同的缓存大小来选择适合以及对您的系统的值):

<filterCache class="solr.FastLRUCache" size="4096" initialSize="4096" autowarmCount="4096"/> 
<queryResultCache class="solr.LRUCache" size="5000" initialSize="5000" autowarmCount="5000"/>