Solr层次结构:如何获得前N个第1级值的所有第2级值

时间:2012-12-16 19:59:53

标签: solr faceted-search

我有一对多值索引字段author和author_norm,我使用https://wiki.apache.org/solr/HierarchicalFaceting#Indexed_Terms中描述的模式为它们创建了一个分层构面字段。方面值如下所示:

0/Blow, J
1/Blow, J/Blow, Joe
1/Blow, J/Blow, Joseph
1/Blow, J/Blow, Jennifer
0/Smith, M
1/Smith, M/Smith, Michelle
1/Smith, M/Smith, Michael
1/Smith, M/Smith, Mike

作者与文章记录相关联,并且在大多数情况下,文章将有许多作者。这意味着对于返回100多篇文章的Solr查询,可能会有1000多名作者代表。

我的问题是当我向用户显示这个层次结构时,由于我的facet.limit和facet.mincount被设置为合理的值,我没有完整的二级值集,即我的层次结构的第二级将在某一点被切断。我会有这样的事情:

  • Blow,J(30)
    • Blow,Joe(17)
    • Blow,Joseph(9)
  • 史密斯,男(22)
    • 史密斯,米歇尔(14)
    • 史密斯,迈克尔(6)

我想在此列表中也有“Blow,Jennifer(4)”和“Smith,Mike(2)”条目,但由于mincount截止值为5,因此它们不会在响应中返回。所以我结束了混乱的显示(17 + 9!= 30等)。

一种选择是在每个第二级列表的底部放置一个“(更多)”链接,并通过ajax获取完整集。我并不为这个解决方案而疯狂,因为它要求用户工作/点击超过他们真正应该做的更多,而且因为我无法控制最初的第二级列表的长度;有时它会是3个名字+“(更多)”,有时2个甚至1个。这只是丑陋。

我可以为我的分层构面字段设置mincount = 1和limit = -1,但这会很疯狂,因为对于大型查询(100k命中),我将获取100k +值,我不需要。我只需要前N个第一级值的全套二级值。

因此,除非有人有更好的建议,否则我假设我需要进行某种后续查询。毕竟,这就是我真正要问的问题:是否有办法在单个后续查询中获取这些第二级值。给定初始solr响应,如何获得我的层次结构的前N个第1级值的所有二级排列?

谢谢!

PS,我正在使用Solr 4.0。

1 个答案:

答案 0 :(得分:0)

您可以修改pivot中任何级别的mincount:

facet.pivot=fieldA,filedB&f.fieldA.limit=3&f.fieldB.limit=-1

当两个字段相同facet.pivot=fieldA,filedA时出现问题,在这种情况下,我可能会创建fieldA的副本作为fieldB