【问题标题】:How to boost Solr relevancy score by inverse of geodist()如何通过 geodist() 的倒数来提高 Solr 相关性分数
【发布时间】:2011-01-15 22:33:15
【问题描述】:

所以我已经实现并成功使用了 Solr 4。我不得不说 Solr 4 太棒了!无论如何,我成功地按距离排序并使用地理过滤器将结果限制在某个区域。我现在想做的是通过距离的倒数来提高相关性分数。这个页面讨论了它,但没有说明如何去做 (http://wiki.apache.org/solr/SpatialSearch)

我尝试了以下方法,但它给了我一个错误:

http://localhost:8983/solr/select/?q={!boost b=recip(geodist(), 1, 1000, 1000)}...

我得到的错误是:

org.apache.lucene.queryParser.ParseException: Expected identifier at pos 27 str='{!boost b=recip(geodist(), 1, 10 in ...

任何帮助将不胜感激。谢谢!

【问题讨论】:

标签: solr lucene distance geospatial solr-boost


【解决方案1】:

您仍然需要在 boost 函数之后指定查询的主要部分:

q={!boost b=recip(geodist(),1,1000,1000)}foo:bar&...

如果您只对通过距离的倒数进行提升感兴趣,您可以使用通配符查询:

q={!boost b=recip(geodist(),1,1000,1000)}*&...

...或使用函数查询解析器:

q={!func}recip(geodist(),1,1000,1000)&...

您还需要指定要查询的纬度/经度值和空间字段作为 geodist 函数的参数:

q={!boost b=recip(geodist(50.1, -0.86, myGeoField),1,1000,1000)}foo:bar&...

...或分解为查​​询字符串参数:

q={!boost b=recip(geodist(),1,1000,1000)}foo:bar&sfield=myGeoField&pt=50.1,-0.86

【讨论】:

  • 谢谢!是的,我搞砸的查询部分是指定纬度/经度和空间字段!再次感谢!
  • 仅供参考,在 solr 3.x 中,您需要删除参数逗号之间的空格
  • @PsychoDad 天哪,这是一个令人讨厌的问题。为我解决了一个问题,非常感谢!
  • 我已经编辑了答案以删除陷阱空间。
【解决方案2】:

只是补充一点,我得到更好的结果......

{!boost b=recip(geodist(),1,100,10)}

我不知道是什么原因造成的,但我希望 Solr 提供更多关于 recip 和 boost 参数的信息。 缺少Current Documentation

【讨论】:

  • recip() 是 recip(x,m,a,b) 形式的函数 a/(m*x+b)。当 a,b 相同时,它返回一个 0 到 1 范围内的值。随着 a,b 变大,返回值的变化较小。
【解决方案3】:

附带说明,这是我工作地点使用的距离提升。它与 Solr 文档站点上的不同。此提升功能将在提升开始之前对若干公里的距离进行同等对待。这在某些情况下很有用,您不希望因距离的微小差异而改变相关性。

您可以将常数 25 更改为您希望提升相同的任意公里数。

您可以这样定义距离提升:

div(1.0, min(1000, max(25, geodist())))

【讨论】:

    猜你喜欢
    • 2011-10-04
    • 2014-10-22
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多