2012-03-28 89 views
1

我开始认为我想要做的事情是不可能的,但我想我会试试这个。Solr使用dismax时计算距离

我正在运行Solr 3.5。

我目前有两种类型的搜索:

  1. 它会返回在得分字段两点之间的距离计算方法为基本空间查询。从我的Solr的日志

示例查询:

?fl=*,score&sort=score+asc&start=0&q={!func}geodist()&sfield=coordinates&pt=59.2363514,18.092783&version=2 
  1. 一个dismax查询,允许对一些领域的自由文本查询。从Solr的日志

示例查询:

mm=1&d=100.0&sfield=coordinates&qf=field1^5.0+fields2^3.0&defType=edismax&version=2&fl=*,score&start=1&q=monkeyhopper&pt=59.2363514,18.0927830000&fq={!geofilt}} 

我想用dismax查询,以取代我第一次查询,但我真的需要在响应中计算出的距离。是的,我可以通过编程的方式来计算距离,但我不希望Solr已经为我做了这个。

我仍然希望能够通过“相关性”,距离或任何其他字段对我的dismax查询进行排序,因此我的提升给出的分数对于排序可能会很有趣,但我不需要将其返回。

回答

1

现在Solr 4+中可以使用伪字段,它允许您做到这一点。

http://localhost:8983/solr/collection1/browse?q=*:*&rows=1000&wt=xml&pt=37.763649,-122.24313&sfield=store&fl=dist:geodist() 

例如,此请求允许我返回一个字段“dist”,其中包含每个条目到指定点的距离。

+1

谢谢,鉴于Solr 4现在很稳定,我会接受这个解决方案:) – polythene 2013-08-13 16:53:35

2

如果我理解正确,您希望在Solr响应中获得函数的结果。 SOLR-2444问题是你在找什么我猜想:它允许在fl参数中包含伪字段,函数等。唯一的问题是它只在中继上提交,所以它在当前Solr上不可用发布,也不会在即将发布的3.6版本中发布。你必须等待第四次发布,但我认为这不会花费很多时间。也许你已经可以开始玩上一次成功的Jenkins构建的snapshot了。

+0

我一直在寻找Solr 4,它可能会解决我的问题。然而,如果这可以用3.5解决,那么它会更好,因为似乎还没有Solr 4的发布日期(尽管你可能是对的,现在可能不会那么长) – polythene 2012-03-28 20:34:21

+0

我不认为有一种开箱即用的方式来使用Solr 3.x完成所需的任务。也许你可以尝试将SOLR-2444补丁应用到3x分支,但我不确定它会起作用。 – javanna 2012-03-29 08:18:14

+0

我倾向于以编程方式进行编程,直到4.0对生产足够稳定。 – polythene 2012-04-02 10:58:28