根据与被搜索文档相关联的字段,可以进行查询,以便动态计算最大距离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;
}
}
答案 0 :(得分:0)
稀释;有趣。您应该将两个空间过滤器一起实现。其中之一,基于索引距离要求的过滤器,以及基于查询索引要求的其他过滤器。
第一个空间字段应该是RecursivePrefixTreeStrategy,您应该在其中索引圆形。在为此字段进行查询/过滤时,您的查询形状就是一个点。第二个空间字段也应该使用RecursivePrefixTreeStrategy,但是这个你应该单独索引这些圆的中心点。您的查询形状是第二个字段的圆圈。两个查询/过滤器单独匹配的次数比您想要的要多,但如果将它们组合在一起使得匹配的文档必须满足两者,您将获得正确的文档集。