2

我在 schema.xml (Solr 4.1) 中有以下字段定义:

<field name="locationCoordinates" type="location_rpt" indexed="true" stored="true" multiValued="true" />

现在我想基本上做以下查询:

过滤坐标是否在地理点的给定距离内(这部分已经工作)并返回到最近点的距离。

或者在现实生活中:

我们有文章。每篇文章都可以在多个商店购买(仅保存为地理位置)(N:N,但我们只有使用 Solr 建模的文章)。现在我想查询给定点范围内的文章,如果它们也返回到该点的距离。

我怎样才能使用 Solr-Queries 实现这一点?

4

1 回答 1

2

如果我理解正确,您需要的是地理排序,对吗?

为了达到同样的效果,您必须使用 Lucene 中的自定义排序功能。

如果按分数、id、字段排序还不够,Lucene 允许您通过提供自己的 FieldComparatorSource 抽象基类的子类来实现自定义排序机制。

脚步:

1) Sort 对象在实例化过程中接受 FieldComparatorSource 类型的实例。

2) 扩展 FieldComparatorSource

3)您必须在 setNextReader() 的 FieldComparatorSource 中使用 FieldCache 加载坐标

4) 对于每个文档,您可以计算与原点的距离并返回 {-1, 0, 1} 之一

实际上,整个示例在以下链接中给出。但是您必须注册免费试用。

Lucene in Action 2 一书中的自定义排序链接

于 2013-03-10T19:27:01.810 回答