@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 SearchResponse search(QueryBuilder queryBuilder, Integer limit, Point location, Boolean locationDistanceSort) { TimeValue timeout = TimeValue.timeValueSeconds(7); SearchRequestBuilder builder = client.prepareSearch("photon").setSearchType(SearchType.QUERY_AND_FETCH) .setQuery(queryBuilder).setSize(limit).setTimeout(timeout); if (locationDistanceSort) builder.addSort(SortBuilders.geoDistanceSort("coordinate", new GeoPoint(location.getY(), location.getX())) .order(SortOrder.ASC)); return builder.execute().actionGet(); } }
break; case 1: builder.sort(SortBuilders.geoDistanceSort(randomAlphaOfLengthBetween(5, 20), AbstractQueryTestCase.randomGeohash(1, 12)).order(randomFrom(SortOrder.values()))); break;