spring - Spring Data Elasticsearch查询合并

标签 spring spring-boot elasticsearch spring-data-elasticsearch

我有一个应用程序,可以从给定点的10 km半径中获取位置,并且我有两个用于查询的过滤器;第一个是按客户编号查询,第二个是根据过滤项目位置查询。我想结合 flex 自定义查询和基于 Spring 数据方法名称的查询。如何合并它们?

我的文件:

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数据elasticsearch查询结果与自定义位置搜索查询结合在一起?

最佳答案

当前,Spring Data Elasticsearch无法做到这一点。我添加了a Jira issue,以便将其实现为一项新功能。

关于spring - Spring Data Elasticsearch查询合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59732980/

相关文章:

gradle - 将资源从子项目复制到胖jar根路径

java - Hibernate 5.1.x命名策略(向后兼容Hibernate 4.x)

elasticsearch - 使用must和match过滤 Elasticsearch 结果,得到意外结果

java - 使用我的第一个 Maven Spring Project 获取 org.springframework.beans.factory.BeanCreationException

java - Spring 3.0 真的支持 JSR-286 吗?

java - 在 jdbcTemplate 或 DataSource 上提交

Java Spring项目: impact of delaying authentication implementation

reactjs - 如何使用Spring Boot Web服务器在浏览器中显示我的React生产版本?

python - Django:自动建议使用Elasticsearch DSL

python - ElasticSearch 更新不是即时的,你如何等待 ElasticSearch 完成更新它的索引?