标签:elasticsearch spring-boot spring-data spring-data-elasticsearch java
我正在使用Elasticsearch Spring数据编写API,我想添加订购.我无法在Google中找到解决方法.所以我在这里写信问你们我该怎么做.如果您需要更多代码,请告诉我您需要什么,我会尝试添加更多代码.
我的代码如下:
AuctionQueryController.java
@RequestMapping(value = "/auctions/search", produces = MediaType.APPLICATION_JSON_VALUE)
private List<Auction> search(
@RequestParam(value = "categoryId", required = false) Long categoryId,
@RequestParam(value = "treeCategoryId", required = false) Long treeCategoryId,
@RequestParam(value = "currency", required = false) String currency,
@RequestParam(value = "priceFrom", required = false) Long priceFrom,
@RequestParam(value = "priceTo", required = false) Long priceTo,
@RequestParam(value = "startDateFrom", required = false) Long startDateFrom,
@RequestParam(value = "startDateTo", required = false) Long startDateTo,
@RequestParam(value = "endDateFrom", required = false) Long endDateFrom,
@RequestParam(value = "endDateTo", required = false) Long endDateTo,
@RequestParam(value = "title", required = false) String title,
@RequestParam(value = "uid", required = false) Long uid,
Pageable pageable) {
final AuctionIndexSearchParams searchParams = AuctionIndexSearchParams.builder()
.categoryId(categoryId)
.treeCategoryId(treeCategoryId)
.currency(currency)
.priceFrom(priceFrom)
.priceTo(priceTo)
.startDateFrom(startDateFrom)
.startDateTo(startDateTo)
.endDateFrom(endDateFrom)
.endDateTo(endDateTo)
.title(title)
.uid(uid)
.build();
return auctionService.searchByIndexParams(searchParams, pageable);
}
AuctionService.java
public List<Auction> searchByIndexParams(AuctionIndexSearchParams searchParams, Pageable pageable) {
final List<FilterBuilder> filters = Lists.newArrayList();
final NativeSearchQueryBuilder searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery());
Optional.ofNullable(searchParams.getCategoryId()).ifPresent(v -> filters.add(boolFilter().must(termFilter("cat", v))));
Optional.ofNullable(searchParams.getCurrency()).ifPresent(v -> filters.add(boolFilter().must(termFilter("curr", v))));
Optional.ofNullable(searchParams.getTreeCategoryId()).ifPresent(v -> filters.add(boolFilter().must(termFilter("tcat", v))));
Optional.ofNullable(searchParams.getUid()).ifPresent(v -> filters.add(boolFilter().must(termFilter("uid", v))));
final BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
if (Optional.ofNullable(searchParams.getTitle()).isPresent()) {
boolQueryBuilder.should(queryStringQuery(searchParams.getTitle()).analyzeWildcard(true).field("title"));
}
if (Optional.ofNullable(searchParams.getStartDateFrom()).isPresent()
&& Optional.ofNullable(searchParams.getStartDateTo()).isPresent()) {
filters.add(rangeFilter("start_date").from(searchParams.getStartDateFrom()).to(searchParams.getStartDateTo()));
}
if (Optional.ofNullable(searchParams.getEndDateFrom()).isPresent()
&& Optional.ofNullable(searchParams.getEndDateTo()).isPresent()) {
filters.add(rangeFilter("end_date").from(searchParams.getEndDateFrom()).to(searchParams.getEndDateTo()));
}
if (Optional.ofNullable(searchParams.getPriceFrom()).isPresent()
&& Optional.ofNullable(searchParams.getPriceTo()).isPresent()) {
filters.add(rangeFilter("price").from(searchParams.getPriceFrom()).to(searchParams.getPriceTo()));
}
searchQuery.withPageable(pageable);
searchQuery.withQuery(boolQueryBuilder);
FilterBuilder[] filterArr = new FilterBuilder[filters.size()];
filterArr = filters.toArray(filterArr);
searchQuery.withFilter(andFilter(filterArr));
final FacetedPage<AuctionIndex> search = auctionIndexRepository.search(searchQuery.build());
return search.map(index ->
auctionRepository.findAuctionById(Long.valueOf(index.getId()))
).getContent();
}
解决方法:
您可以为此使用SortBuilders.
searchQuery.withSort(SortBuilders.fieldSort("fieldName").order(SortOrder.DESC))
这将根据传递的fieldName对结果进行排序.
希望这可以帮助
标签:elasticsearch,spring-boot,spring-data,spring-data-elasticsearch,java 来源: https://codeday.me/bug/20191119/2033180.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。