【发布时间】: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/距离”相同。我是否误解了它的用法?
-
我想我在那儿被抓了一会儿。那么你使用过
bf、bq或boost参数吗?bf和bq应该应用 additive 提升(这听起来像你所描述的),boost应该给你一个 multiplicative 提升(我相信,就是你想要的)。 -
@femtoRgon 你是对的。将其发布为答案,我将其标记为这样。非常感谢。
-
很高兴我们到了那里,很抱歉与之前的评论混淆了。