0

可以在动态计算最大距离的地方进行查询dist,具体取决于与正在搜索的文档相关的字段是什么。

我的意思是:

ctx.makeCircle(la, lo, DistanceUtils.dist2Degrees(Min(100km, currentDocumnet.getField("max_distance")),DistanceUtils.EARTH_MEAN_RADIUS_KM))

代替:

  new SpatialArgs(SpatialOperation.Intersects,ctx.makeCircle(la, lo,   DistanceUtils.dist2Degrees(dist,DistanceUtils.EARTH_MEAN_RADIUS_KM)));

为了得到我想要的结果,我正在对我的 ScoreDoc 进行一些手动过滤:

                String maxDistance = d.get(Offer.MAX_DISTANCE);
                if (maxDistance != null && maxDistance.length() > 0) {
                    logger.info("Contractor max. distance =" + maxDistance);
                    int maxContractorDistance = Integer
                            .parseInt(maxDistance);

                    if (distKM > maxContractorDistance
                            && maxContractorDistance > 0) {
                        logger.info("Contractor is too far"
                                + maxContractorDistance);
                        continue;
                    }

                }
4

1 回答 1

0

啊;有趣的。您应该同时使用两个空间过滤器来实现这一点。其中一个是基于索引距离要求的过滤器,另一个是基于查询索引要求的过滤器。

第一个空间字段应该是 RecursivePrefixTreeStrategy ,您应该在其中索引圆形。对此字段进行查询/过滤时,您的查询形状是一个点。第二个空间字段也应该使用 RecursivePrefixTreeStrategy 但是这个你应该单独索引这些圆圈的中心点。您的查询形状是第二个字段的圆形。两个查询/过滤器单独匹配的次数比您想要的要多,但是如果您将它们组合在一起以使匹配的文档必须同时满足两者,您将获得正确的文档集。

于 2012-12-07T14:13:40.390 回答