【问题标题】:How can I sort facets by their tf-idf score, rather than popularity?我如何按他们的 tf-idf 分数而不是受欢迎程度对方面进行排序?
【发布时间】:2014-12-11 12:24:14
【问题描述】:

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

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

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

无论如何,这可能吗?您还建议对“趣味性”进行哪些其他相对测量?

【问题讨论】:

标签: solr facet faceted-search tf-idf


【解决方案1】:

facet.sort

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

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

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

可以在每个字段的基础上指定此参数。

如果不对客户端或 Solr 进行一些重大更改,您似乎无法开箱即用。

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      已经讨论过this way back in 2009

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-10
      • 2022-01-12
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多