如何在Solr结果中获取构面范围?

时间:2020-03-05 18:44:50  来源:igfitidea点击:

假设我在Solr中有一个称为价格的字段,并且该字段具有多面性。我想将构面作为值的范围(例如:0-100、100-500、500-1000等)。怎么做?

我可以事先指定范围,但我也想知道是否可以根据文档中的值自动计算范围(例如5个值)?

解决方案

回答

也许会有更好的Solr特定答案,但是我使用直接的Lucene,并且由于牵引力不足,所以我会采取行动。在那里,我将使用包装原始的" Query"的" FilteredQuery"创建一个" Filter"。然后,我将为感兴趣的字段获取一个" FieldCache"。枚举过滤器位集中的匹配项,对于每个匹配项,我们将从字段缓存中获取字段的值,并将其添加到SortedSet中。当我们获得所有匹配后,将集合的大小除以所需范围的数目(根据用户界面的人,五到七个是一个很好的数字),而不是单值约束,则构面是具有每个子集的上下限的范围查询。

我建议对少量值使用一些特殊情况的逻辑;显然,如果只有四个不同的值,则尝试从中进行5个范围的细化是没有意义的。低于某个阈值(例如3 *理想范围数),我们只是正常显示构面而不是范围。

回答

要回答第一个问题,我们可以使用通用构面查询支持来获取构面范围。这是一个例子:

http://localhost:8983/solr/select?q=video&rows=0&facet=true&facet.query=price:[*+TO+500]&facet.query=price:[500+TO+*]

至于第二个问题(自动提示构面范围),该问题尚未实现。有人认为,这种查询最好在应用程序上实现,而不是让Solr"猜测"最佳方面。

以下是有关该主题的一些讨论:

  • (存档)https://web.archive.org/web/20100416235126/http://old.nabble.com/Re:-faceted-browsing-p3753053.html
  • (存档)https://web.archive.org/web/20090430160232/http://www.nabble.com/Re:-Sorting-p6803791.html
  • (存档)https://web.archive.org/web/20090504020754/http://www.nabble.com/Dynamically-calculated-range-facet-td11314725.html