我开始认为我想做的事情是不可能的,但我想试一试。
我正在运行Solr 3.5。
我目前有两种类型的搜索:
- 一种基本的空间查询,返回分数字段中两点之间的计算距离
我的Solr日志中的示例查询:
?fl=*,score&sort=score+asc&start=0&q={!func}geodist()&sfield=coordinates&pt=59.2363514,18.092783&version=2
- 一个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查询进行排序,这样我的提升给出的分数可能对排序很有意思,但我不需要返回它。
如果我理解正确,您希望在Solr响应中获得函数的结果。我想,SOLR-2444问题正是你想要的:它允许在fl
参数中包含伪字段、函数等。唯一的问题是它只在trunk上提交,所以它在当前的SOLR版本中不可用,在即将发布的3.6版本中也不可用。你必须等待4的发布,但我认为这不会花很多时间。也许你已经可以开始玩Jenkins上一次成功构建的快照了。
Solr 4+中现在提供了伪字段,允许您执行此操作。
http://localhost:8983/solr/collection1/browse?q=*:*&rows=1000&wt=xml&pt=37.763649,-122.24313&sfield=store&fl=dist:geodist()
例如,这个请求允许我返回一个字段"dist",其中包含每个条目到指定点的距离。