我如何通过他们的tf-idf分数而不是受欢迎程度对方面进行排序?

时间:2014-10-16 08:07:40

标签: solr facet faceted-search tf-idf

对于我们的Solr文档的特定方面字段,能够通过他们的相对“有趣的”(即他们的tf-idf分数而不是受欢迎程度)对facet进行排序会更有意义。这样可以很容易地自动删除不需要的常用英语单词,因为它们的TF和DF都很高。

进行查询时,应使用参与结果列表的所有文件计算TF。

我认为这种方法的唯一问题是当没有进行查询时,或者当搜索“”时。那么,就趣味性而言,任何一个词都不会胜过其他词。如果我错了,请纠正我。

无论如何,这可能吗?您会建议“有趣的”其他相关测量值吗?

3 个答案:

答案 0 :(得分:1)

  

<强> facet.sort

     

此参数确定构面字段约束的顺序。

     

count - 按计数(最高计数优先)索引对约束进行排序   返回按索引顺序排序的约束(按字典顺序排列)   索引术语)。对于ascii范围内的术语,这将是   按字母排序。如果facet.limit更大,则默认为count   否则,指数不是0。

     

在Solr1.4之前,需要使用true而不是count和false   而不是索引。

     

可以基于每个字段指定此参数。

如果客户端或Solr没有发生重大变化,您似乎无法开箱即用。

答案 1 :(得分:1)

这是一个非常有趣的想法,我一直在寻找一个解决方案。这方面有什么新东西吗?

我假设对于具有有限数量的可能值的方面,可以在客户端计算兴趣得分:对于基于过滤器的给定结果集,我们可以使用本地params排除该过滤器的方面-syntax(!tag&amp;!ex)Local Params - 在客户端,我们可以计算相对于完整索引(或过滤器的另一个子部分)的相对值。这可能不适用于查询参数构建的结果集。

但是,对于具有许多潜在值的索引文本字段(例如全文字段),必须检索所有术语的df计数。我想这可以使用terms component有效地完成,并且可能应该缓存在客户端/内存中以提高效率。然而,这似乎是一种麻烦的方法,并且不能灵活地仅排除某些过滤器。

对于这些情况,最好在solr中将其作为facet.sort的新选项实现,因为在计算facet计数时,所需的信息很容易获得。

答案 2 :(得分:0)

有关于this way back in 2009的讨论。

目前,facet.json具有更大的灵活性,例如在另一个字段的stats-facets(例如avg(price))上排序,我想这可以作为一个额外的sort-option实现。至少对于term类型的facet,结果计数(当前结果集的df)只需要除以索引的该项的df(docfreq)。如果当前结果集是完整索引,则facet应按count排序。

我可能会在客户端中为具有固定且相当小的词汇表的字段实施一种解决方法,例如:基于完整索引的第二个兑现查询。但是,对于术语字段和类似字段,这可能无法扩展。