spring - Spring Data Elasticsearch 查询合并
问题描述
我有一个从给定点的 10 公里半径获取位置的应用程序,我有两个过滤器用于查询;第一个是按客户编号查询,第二个是按过滤后的项目位置查询。我想结合弹性自定义查询和基于弹簧数据方法名称的查询。我怎样才能合并它们?
我的文件:
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 data elasticsearch 查询结果与自定义位置搜索查询结合起来?
解决方案
目前这在 Spring Data Elasticsearch 中是不可能的。我添加了一个 Jira 问题,以便将其作为一项新功能实现。
推荐阅读
- node.js - 将 MERN 应用程序部署到 Heroku 时出错
- ansible - jinja2 表达式引用库存集合作为参数传递给 shell 脚本
- c# - Xamarin.Forms.Skeleton - 是什么让插件的动画和 BackgroundColor 不出现?
- php - 注意:未定义索引:死机白屏中的主机
- javascript - javascript方法的返回值
- javascript - 从链接运行脚本
- c++ - 如何使用宏根据参数定义不同的数据类型?
- javascript - 将函数作为 props 传递给 React 组件会如何影响性能?
- php - 如何将临时表中的 id 更新为实际表
- ruby - CSV - 处理对某些字段具有相同值的每组连续行