package cn.itcast.hotel.service.impl;
import cn.itcast.hotel.mapper.HotelMapper;
import cn.itcast.hotel.pojo.Hotel;
import cn.itcast.hotel.pojo.HotelDoc;
import cn.itcast.hotel.pojo.PageResult;
import cn.itcast.hotel.pojo.RequestParams;
import cn.itcast.hotel.service.IHotelService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.common.xcontent.XContentType;
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.rest.RestStatus;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.search.suggest.Suggest;
import org.elasticsearch.search.suggest.SuggestBuilder;
import org.elasticsearch.search.suggest.SuggestBuilders;
import org.elasticsearch.search.suggest.completion.CompletionSuggestion;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 酒店服务
*
* @author ZY
* @date 2022/11/05
*/
@Slf4j
@Service
public class HotelService extends ServiceImpl<HotelMapper, Hotel> implements IHotelService {
@Autowired
private RestHighLevelClient restHighLevelClient;
@Override
public PageResult search(RequestParams params) {
try {
// 1.准备Request
SearchRequest request = new SearchRequest("hotel");
// 2.准备请求参数
// 2.1.query
buildBasicQuery(params, request);
// 2.2.分页
int page = params.getPage();
int size = params.getSize();
request.source().from((page - 1) * size).size(size);
// 2.3.距离排序
String location = params.getLocation();
if (StringUtils.isNotBlank(location)) {
request.source().sort(SortBuilders
.geoDistanceSort("location", new GeoPoint(location))
.order(SortOrder.ASC)
.unit(DistanceUnit.KILOMETERS)
);
}
// 3.发送请求
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
// 4.解析响应
return handleResponse(response);
} catch (IOException e) {
throw new RuntimeException("搜索数据失败", e);
}
}
@Override
public Map<String, List<String>> filters() {
try {
// 1.准备请求
SearchRequest request = new SearchRequest("hotel");
// 2.请求参数
// 2.1.query
//buildBasicQuery(params, request);
// 2.2.size
request.source().size(0);
// 2.3.聚合
buildAggregations(request);
// 3.发出请求
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
// 4.解析结果
Aggregations aggregations = response.getAggregations();
Map<String, List<String>> filters = new HashMap<>(3);
// 4.1.解析品牌
List<String> brandList = getAggregationByName(aggregations, "brandAgg");
filters.put("brand", brandList);
// 4.1.解析品牌
List<String> cityList = getAggregationByName(aggregations, "cityAgg");
filters.put("city", cityList);
// 4.1.解析品牌
List<String> starList = getAggregationByName(aggregations, "starAgg");
filters.put("starName", starList);
return filters;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public Map<String, List<String>> getFilters(RequestParams params) {
try {
// 1.准备请求
SearchRequest request = new SearchRequest("hotel");
// 2.请求参数
// 2.1.query
buildBasicQuery(params, request);
// 2.2.size
request.source().size(0);
// 2.3.聚合
buildAggregations(request);
// 3.发出请求
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
// 4.解析结果
Aggregations aggregations = response.getAggregations();
//System.out.println("aggregations:" + JSON.toJSON(aggregations));
Map<String, List<String>> filters = new HashMap<>(3);
// 4.1.解析品牌
List<String> brandList = getAggregationByName(aggregations, "brandAgg");
filters.put("brand", brandList);
// 4.1.解析品牌
List<String> cityList = getAggregationByName(aggregations, "cityAgg");
filters.put("city", cityList);
// 4.1.解析品牌
List<String> starList = getAggregationByName(aggregations, "starAgg");
filters.put("starName", starList);
System.out.println(JSON.toJSON(filters));
return filters;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public List<String> getSuggestion(String key) {
try {
// 1.准备请求
SearchRequest request = new SearchRequest("hotel");
// 2.请求参数
request.source().suggest(new SuggestBuilder()
.addSuggestion(
"hotelSuggest",
SuggestBuilders
.completionSuggestion("suggestion")
.size(10)
.skipDuplicates(true)
.prefix(key)
));
// 3.发出请求
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
// 4.解析
Suggest suggest = response.getSuggest();
// 4.1.根据名称获取结果
CompletionSuggestion suggestion = suggest.getSuggestion("hotelSuggest");
// 4.2.获取options
List<String> list = new ArrayList<>();
for (CompletionSuggestion.Entry.Option option : suggestion.getOptions()) {
// 4.3.获取补全的结果
String str = option.getText().toString();
没有合适的资源?快使用搜索试试~ 我知道了~
hotel-demohotel-demo
共116个文件
java:56个
class:17个
xml:12个
需积分: 3 0 下载量 168 浏览量
2023-04-01
21:04:06
上传
评论
收藏 47.65MB RAR 举报
温馨提示
hotel-demohotel-demo
资源推荐
资源详情
资源评论
收起资源包目录
hotel-demohotel-demo (116个子文件)
HotelService.class 18KB
HotelDoc.class 7KB
Hotel.class 7KB
RequestParams.class 5KB
BasePageDto.class 3KB
PageResult.class 2KB
HotelService$1.class 2KB
SimpleCORSFilter.class 2KB
ManagerEsReqDto.class 2KB
HotelController.class 2KB
HotelDemoApplication.class 1KB
HotelListener.class 1KB
HotelIndexConstants.class 1KB
IHotelService.class 1015B
HotelMqConstants.class 625B
esSearch.class 481B
HotelMapper.class 301B
index.css 7KB
index.css 7KB
banner.css 2KB
banner.css 2KB
.gitignore 0B
index.html 22KB
index.html 22KB
index.html 22KB
index.html 22KB
hotel-demo.iml 15KB
hotel-demo-0.0.1-SNAPSHOT.jar 53.24MB
HotelService.java 15KB
HotelDocumentTest.java 8KB
HotelSearchTest.java 5KB
HotelSearchAfterTest3.java 5KB
HotelSearchAfterTest2.java 4KB
HotelSearchAfterTest4.java 4KB
esSearch.java 4KB
HotelSearchAfterTest.java 4KB
HotelAggregationTest.java 3KB
ThreadDemo3.java 2KB
HotelIndexTest.java 2KB
HotelIndexConstants.java 2KB
ThreadPoolDemo1.java 2KB
Account.java 2KB
TimerDemo2.java 2KB
Account.java 2KB
ThreadPoolDemo2.java 2KB
CallSystem.java 1KB
HotelListener.java 1KB
TimerDemo1.java 1KB
Account.java 1KB
SimpleCORSFilter.java 1KB
Account.java 1KB
ThreadDemo2Other.java 1KB
HotelDoc.java 1KB
HotelController.java 950B
ThreadDemo2.java 936B
ThreadDemo01.java 864B
ThreadDemo1.java 813B
HotelDemoApplication.java 793B
MyCallable.java 678B
Hotel.java 639B
ThreadPoolDemo3.java 625B
IHotelService.java 608B
HotelDemoApplicationTests.java 585B
ThreadDemo02.java 571B
MyRunnable.java 532B
ThreadDemo.java 459B
MyThread.java 442B
TestSafeDemo.java 438B
TestSafeDemo.java 438B
TestSafeDemo.java 438B
BasePageDto.java 415B
TestDemo.java 407B
HotelMqConstants.java 407B
DrawThread.java 384B
RequestParams.java 378B
ManagerEsReqDto.java 375B
DrawThread.java 355B
DrawThread.java 353B
DrawThread.java 353B
PageResult.java 345B
ScrollDto.java 287B
ReceiveThread.java 254B
CallThread.java 226B
HotelMapper.java 191B
vue.js 366KB
vue.js 366KB
amap.min.js 56KB
amap.min.js 56KB
axios.min.js 13KB
axios.min.js 13KB
inputFiles.lst 3KB
inputFiles.lst 1KB
createdFiles.lst 707B
createdFiles.lst 0B
hotel-demo-0.0.1-SNAPSHOT.jar.original 160KB
heima.png 7KB
heima.png 7KB
ad.png 2KB
ad.png 2KB
ad2.png 1KB
共 116 条
- 1
- 2
资源评论
永翔
- 粉丝: 1
- 资源: 36
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- TG-2024-04-26-183849310.mp4
- 汇编语言的概要介绍与分析
- 个人博客系统设计与开发.zip
- 2023-04-06-项目笔记 - 第一百十五阶段 - 4.4.2.113全局变量的作用域-113 -2024.04.26
- 2023-04-06-项目笔记 - 第一百十五阶段 - 4.4.2.113全局变量的作用域-113 -2024.04.26
- htmlzwbjq_downyi.com.zip
- 无头单向非循环链表的实现(Test.c)
- 无头单向非循环链表的实现(SList.c)
- 浏览器重定向插件更新文件
- SSA-BP麻雀算法优化BP神经网络多特征分类预测(Matlab实现完整源码和数据)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功