У меня есть приложение для получения местоположения по радиусу 10 км от заданных точек, и у меня есть два фильтра для запроса; первый - это запрос по номеру клиента, а второй - запрос по местоположению отфильтрованных элементов согласно Я хочу объединить пользовательский запрос elasti c и запрос метода имени источника данных. Как их объединить?
Мой документ:
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.GeoPointField;
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Getter
@Setter
@Document(indexName = "customer", replicas = 0, refreshInterval = "-1")
public class Customer {
@GeneratedValue(strategy= GenerationType.AUTO)
@Id
private String id;
private Integer cifNo;
private String userId;
private String name;
private Integer locationCount;
private Date lastSeenDate;
@GeoPointField
private GeoPoint geoPoint;
}
Репозиторий;
@Repository
public interface CustomerLocationRepository extends ElasticsearchRepository<CustomerLocation,Long> {
List<CustomerLocation> findByCifNoAndUserIdIsNullOrderByLastSeenDateDesc(Integer cifNo);
List<CustomerLocation> findByCifNoAndUserIdOrderByLastSeenDateDesc(Integer clientNo, String userId);
}
Служба:
public List<CustomerLocation> getCustomersPlacesIndexWithinLocation(GenericRequest genericRequest) {
GeoDistanceQueryBuilder geoDistanceQueryBuilder = QueryBuilders
.geoDistanceQuery("geoPoint")
.point(genericRequest.getLatitude(),genericRequest.getLongitude())
.distance(10, DistanceUnit.KILOMETERS);
List<CustomerLocation> customerLocationList;
if(genericRequest.getUserId()!=null) {
customerLocationList = customerLocationRepository.findByCifNoAndUserIdOrderByLastSeenDateDesc(Integer.valueOf(genericRequest.getClientNo()),genericRequest.getUserId());
} else {
customerLocationList = customerLocationRepository.findByCifNoAndUserIdIsNullOrderByLastSeenDateDesc(Integer.valueOf(genericRequest.getClientNo()));
}
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withFilter(geoDistanceQueryBuilder)
.build();
return elasticsearchTemplate.queryForList(searchQuery,CustomerLocation.class);
}
Как объединить Результат запроса данных эластичных данных Spring с пользовательским поисковым запросом местоположения?