4

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

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

4

3 回答 3

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)&...

您还需要指定要查询的纬度/经度值和空间字段作为 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
于 2011-01-28T11:20:54.143 回答
0

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

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

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

于 2015-02-27T11:11:59.677 回答
0

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

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

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

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

距离提升图

于 2017-08-22T18:08:55.067 回答