我正在使用Solr而我想要在一个字段“group”上面对。
由于“group”是由用户创建的,因此“group”可能会有大量的值。
Solr能够处理这样的用例吗?或者Solr不适合具有大量值的facet字段吗?
据我所知,我可以设置facet.limit来限制为facet字段返回的值的数量。这会对我有帮助吗? 假设搜索中有“100,000”匹配值,如果我将facet.limit设置为50.会加快查询速度,或者查询仍然会很慢,因为Solr仍然需要处理并排序所有构面值并返回前50名?
有关如何针对大量方面值调整Solr的任何提示?
感谢。
答案 0 :(得分:7)
从1.4开始,solr处理具有大量值的facet,因为它默认使用简单的facet计数。 (facet.method默认为'fc')。
在1.4之前,solr正在使用基于滤波器的分面方法(枚举),这对于具有少量值的属性的分面来说肯定更快。此方法每个facet值需要一个过滤器。
关于facet.limit,把它想象成一种在facet空间中导航的方法(与facet.offset一起使用),就像用行/偏移在结果空间中导航一样。所以10~50的值是明智的。
与行/偏移一样,并且由于Solr的性质,当偏移量变大时,你可以预期facet.limit / facet.offset的性能会降低,但如果你保持在合理的范围内,它应该是完全正常的
默认情况下,solr首先输出更频繁的构面。
总结一下:
使用Solr 1.4
确保facet.method为'fc'(嗯,这是默认值)。
使用facet.limit / facet.offset浏览您的构面空间。
答案 1 :(得分:1)
不要忽视启用缓存分面相关参数(尝试使用不同的缓存大小来选择适合您系统的值):
<filterCache class="solr.FastLRUCache" size="4096" initialSize="4096" autowarmCount="4096"/>
<queryResultCache class="solr.LRUCache" size="5000" initialSize="5000" autowarmCount="5000"/>