[本文参考于:https://blog.youkuaiyun.com/qq_34972627/article/details/80270292]
先说下自己的业务需求吧,需要在搜索的时候,如果某个条件null,则不参与搜索,说实话,纠结了很久,自己代码理解能力还是需要进一步提升呀。。。。
上面说到的业务需求,则要对业务代码进行if判断
BoolQueryBuilder boolQueryBuilder = boolQuery();
boolQueryBuilder.must(multiMatchQuery(searchKeyword,"title"));
if (null != categoryId) {
boolQueryBuilder.must(matchQuery("category.id",categoryId));
}
if (price.isEmpty() == false) {
String[] split = price.split("-");
boolQueryBuilder.must(rangeQuery("price").gte(split[0]).lte(split[1]));
}
if (null != brandId) {
boolQueryBuilder.must(matchQuery("brand.id",brandId));
}
if (null != elasticPropertyList) {
boolQueryBuilder.must(termsQuery("properties.id",elasticPropertyList));
}
// SortBuilder sortBuilder = SortBuilders.fieldSort("weight").order(SortOrder.ASC);
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(boolQueryBuilder)
// .withSort(sortBuilder)
.withPageable(pageable)
.build();
List<ElasticGoods> posts = elasticsearchTemplate.queryForList(searchQuery, ElasticGoods.class);
觉得代码太长了,可以自己进行精简,反正突出的部分是:
BoolQueryBuilder boolQueryBuilder = boolQuery();
if (null != categoryId) {
boolQueryBuilder.must(matchQuery("category.id",categoryId));
}
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(boolQueryBuilder)
.withPageable(pageable)
.build();