如何通过geodist()的逆来提高Solr相关性得分

时间:2011-01-15 22:33:15

标签: solr lucene distance geospatial solr-boost

所以我已经实现并成功使用了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 ...

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

3 个答案:

答案 0 :(得分:11)

您仍需要在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)&...

您还需要指定纬度/经度值和空间字段,以作为地理分析函数的参数进行查询:

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

答案 1 :(得分:0)

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

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

我不知道是什么导致这种情况,但我希望Solr提供有关recip和boost参数的更多信息。 Current Documentation缺乏。{/ p>

答案 2 :(得分:0)

作为旁注,这是我工作地点使用的距离提升。它与Solr文档站点上的不同。此增强功能将在增强开始之前将距离平均处理数千公里。这在某些情况下非常有用,在这些情况下,您不希望针对距离的微小差异进行相关性更改。

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

您可以定义距离提升:

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

distance boost plot