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

ああ; 面白い。これは、2つの空間フィルターを一緒に実装する必要があります。そのうちの1つは、インデックス距離要件に基づくフィルターであり、他のフィルターは、クエリインデックス要件に基づくフィルターです。

最初の空間フィールドはRecursivePrefixTreeStrategyである必要があります。これは、円の形状にインデックスを付ける場所です。このフィールドのクエリ/フィルターを作成する場合、クエリの形状がポイントになります。2番目の空間フィールドもRecursivePrefixTreeStrategyを使用する必要がありますが、これはこれらの円の中心点のみにインデックスを付ける必要があります。クエリの形状は、この2番目のフィールドの円です。両方のクエリ/フィルターだけで必要以上に一致しますが、一致するドキュメントが両方を満たす必要があるようにそれらを組み合わせると、正しいドキュメントセットが得られます。

于 2012-12-07T14:13:40.390 に答える