@Override public void visit( WithinOperand op ) { final String name = op.getProperty().getValue().toLowerCase(); float lat = op.getLatitude().getFloatValue(); float lon = op.getLongitude().getFloatValue(); float distance = op.getDistance().getFloatValue(); final FilterBuilder fb = FilterBuilders.geoDistanceFilter( IndexingUtils.FIELD_LOCATION_NESTED ).lat( lat ).lon( lon ) .distance( distance, DistanceUnit.METERS ); filterBuilders.push( fieldNameTerm( name, fb ) ); //create our geo-sort based off of this point specified //this geoSort won't has a sort on it final GeoDistanceSortBuilder geoSort = SortBuilders.geoDistanceSort( IndexingUtils.FIELD_LOCATION_NESTED ).unit( DistanceUnit.METERS ) .geoDistance(GeoDistance.SLOPPY_ARC).point(lat, lon); final TermFilterBuilder sortPropertyName = sortPropertyTermFilter(name); geoSort.setNestedFilter( sortPropertyName ); geoSortFields.addField(name, geoSort); //no op for query, push queryBuilders.push( NoOpQueryBuilder.INSTANCE ); }
@Override public GeoDistanceSortBuilder rewrite(QueryRewriteContext ctx) throws IOException { if (nestedFilter == null && nestedSort == null) { return this; } if (nestedFilter != null) { QueryBuilder rewrite = nestedFilter.rewrite(ctx); if (nestedFilter == rewrite) { return this; } return new GeoDistanceSortBuilder(this).setNestedFilter(rewrite); } else { NestedSortBuilder rewrite = nestedSort.rewrite(ctx); if (nestedSort == rewrite) { return this; } return new GeoDistanceSortBuilder(this).setNestedSort(rewrite); } } }
result.setNestedFilter(nestedFilter);
@Override public GeoDistanceSortBuilder rewrite(QueryRewriteContext ctx) throws IOException { if (nestedFilter == null && nestedSort == null) { return this; } if (nestedFilter != null) { QueryBuilder rewrite = nestedFilter.rewrite(ctx); if (nestedFilter == rewrite) { return this; } return new GeoDistanceSortBuilder(this).setNestedFilter(rewrite); } else { NestedSortBuilder rewrite = nestedSort.rewrite(ctx); if (nestedSort == rewrite) { return this; } return new GeoDistanceSortBuilder(this).setNestedSort(rewrite); } } }
result.setNestedFilter(nestedFilter);
result.setNestedFilter(nestedFilter);