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

Jay*_*ker 5 solr faceted-search

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

  • 吹,J(30)
    • 打击,乔(17)
    • 吹,约瑟夫(9)
  • 史密斯,M(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.

Fux*_*uxi 0

您可以修改数据透视表中任何级别的 mincount:

facet.pivot=fieldA,filedB&f.fieldA.limit=3&f.fieldB.limit=-1
Run Code Online (Sandbox Code Playgroud)

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