fix(dev): bug修复
This commit is contained in:
parent
58669de46a
commit
5db609a6d5
|
@ -16,6 +16,8 @@ import org.elasticsearch.common.geo.GeoPoint;
|
|||
import org.elasticsearch.common.unit.DistanceUnit;
|
||||
import org.elasticsearch.index.query.BoolQueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryBuilders;
|
||||
import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;
|
||||
import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;
|
||||
import org.elasticsearch.search.SearchHit;
|
||||
import org.elasticsearch.search.sort.SortBuilders;
|
||||
import org.elasticsearch.search.sort.SortOrder;
|
||||
|
@ -33,18 +35,15 @@ public class HotelService extends ServiceImpl<HotelMapper, Hotel> implements IHo
|
|||
|
||||
@Resource
|
||||
private RestHighLevelClient client;
|
||||
|
||||
@Override
|
||||
public PageResult search(RequestParams params) {
|
||||
SearchRequest request = new SearchRequest("hotel");
|
||||
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
|
||||
|
||||
paramCheck(params, boolQuery);
|
||||
buildQuery(params, request);
|
||||
|
||||
Integer page = params.getPage();
|
||||
Integer size = params.getSize();
|
||||
request.source().from((page - 1) * size).size(size);
|
||||
if (StringUtils.isEmpty(params.getLocation())) {
|
||||
if (!StringUtils.isEmpty(params.getLocation())) {
|
||||
request.source().sort(SortBuilders
|
||||
.geoDistanceSort("location", new GeoPoint(params.getLocation()))
|
||||
.order(SortOrder.ASC)
|
||||
|
@ -59,24 +58,43 @@ public class HotelService extends ServiceImpl<HotelMapper, Hotel> implements IHo
|
|||
}
|
||||
}
|
||||
|
||||
private void paramCheck(RequestParams params, BoolQueryBuilder boolQuery) {
|
||||
private void buildQuery(RequestParams params, SearchRequest request) {
|
||||
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
|
||||
|
||||
if (StringUtils.isEmpty(params.getKey())) {
|
||||
boolQuery.must(QueryBuilders.matchAllQuery());
|
||||
} else {
|
||||
boolQuery.must(QueryBuilders.matchQuery("all", params.getKey()));
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(params.getCity())) {
|
||||
if (!StringUtils.isEmpty(params.getBrand())) {
|
||||
boolQuery.filter(QueryBuilders.termQuery("brand", params.getBrand()));
|
||||
}
|
||||
if (!StringUtils.isEmpty(params.getStarName())) {
|
||||
boolQuery.filter(QueryBuilders.termQuery("starName", params.getStarName()));
|
||||
}
|
||||
|
||||
if (!StringUtils.isEmpty(params.getCity())) {
|
||||
boolQuery.filter(QueryBuilders.termQuery("city", params.getCity()));
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(params.getStarName())) {
|
||||
if (!StringUtils.isEmpty(params.getStarName())) {
|
||||
boolQuery.filter(QueryBuilders.termQuery("city", params.getSize()));
|
||||
}
|
||||
|
||||
if (params.getMinPrice() != null && params.getMaxPrice() != null) {
|
||||
boolQuery.filter(QueryBuilders.rangeQuery("price").gte(params.getMinPrice()).lte(params.getMaxPrice()));
|
||||
}
|
||||
|
||||
FunctionScoreQueryBuilder functionScoreQuery =
|
||||
QueryBuilders.functionScoreQuery(boolQuery,
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.termQuery("isAd", true),
|
||||
ScoreFunctionBuilders.weightFactorFunction(10)
|
||||
)
|
||||
});
|
||||
request.source().query(functionScoreQuery);
|
||||
}
|
||||
|
||||
private PageResult handleResponse(SearchResponse response) throws IOException {
|
||||
|
|
Loading…
Reference in New Issue