【问题标题】:Solr: Sort results by relevance / distanceSolr:按相关性/距离对结果进行排序
【发布时间】:2014-03-21 20:52:39
【问题描述】:

我想对 Solr 查询的结果进行排序,方法是它们的相关性除以它们与某个点的地理距离。我已经尝试过 1/distance 的提升(使用带有 edismax 的 boost 参数)和它的各种变体。这样做的问题是,根据查询,提升的相对权重会有所不同(例如,长查询与非常短的查询)。因此,理想情况下,我希望能够让距离对所有查询产生相同的影响,因为我正在构建推荐引擎。我不能使用 MLT,因为据我所知,它也不允许您将距离合并到 MLT 请求中,只有文档相似性。我能想到的唯一方法是将整个查询嵌入到排序中的查询函数中,例如

sort=div(query(deftype=edismax&q=title:java&title:developer), sum(1, geodist(location, x,y)))

完整的查询实际上要长得多,让它在排序中再次计算文档相关性似乎很荒谬。有一个更好的方法吗?有没有更好的方法来利用地理空间提升,以便提升始终与查询的其余部分成正比?

【问题讨论】:

  • 您尝试过根据bf 参数中的距离进行提升吗? (Solr reference guide 提供了提升附近结果的示例:&q.alt=*:*&fq={!geofilt}&sfield=store&pt=45.15,-93.85&d=50&bf=recip(geodist(),2,200,20)&sort=score desc
  • 是的,请参阅我上面的帖子。据我了解,该参数与“提升 1/距离”相同。我是否误解了它的用法?
  • 我想我在那儿被抓了一会儿。那么你使用过bfbqboost 参数吗? bfbq 应该应用 additive 提升(这听起来像你所描述的),boost 应该给你一个 multiplicative 提升(我相信,就是你想要的)。
  • @femtoRgon 你是对的。将其发布为答案,我将其标记为这样。非常感谢。
  • 很高兴我们到了那里,很抱歉与之前的评论混淆了。

标签: solr lucene solr4


【解决方案1】:

用于这种提升的参数是boost 参数。它的工作原理与bf 参数非常相似,但应用了乘法提升;也就是将 boost 函数的结果乘以分数。

bfbq 参数将 boost 函数的结果添加到分数中,就好像它是另一个查询词一样,因此更复杂的查询通常会看到 boost 函数的相对权重较小,正如您所描述的.

【讨论】: