Слияние запросов Spring Data Elasticsearch - PullRequest
1 голос
/ 14 января 2020

У меня есть приложение для получения местоположения по радиусу 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 с пользовательским поисковым запросом местоположения?

1 Ответ

1 голос
/ 14 января 2020

В настоящее время это невозможно с Spring Data Elasticsearch. Я добавил проблему Jira , чтобы это было реализовано как новая функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...