java操作solr实现多条件查询
分类: ssm 专栏: 爱旅行项目 标签: java操作solr实现多条件查询
2023-02-20 18:46:05 962浏览
java操作solr实现多条件查询
if (EmptyUtils.isEmpty(vo) || EmptyUtils.isEmpty(vo.getDestination())){
throw new Exception("目的地不能为空");
}
SolrQuery solrQuery = new SolrQuery("*:*");
StringBuilder qQuery = new StringBuilder();
if (EmptyUtils.isNotEmpty(vo)) {
//q条件
//destination (string): [必填] 目的地
qQuery.append("destination:" + vo.getDestination());
//keyword (string): [非必填] 关键字
if (EmptyUtils.isNotEmpty(vo.getKeywords())) {
qQuery.append(" AND keyword:" + vo.getKeywords());
}
if (EmptyUtils.isNotEmpty(qQuery.toString())) {
solrQuery.setQuery(qQuery.toString());
}
//fq条件
//hotelLevel (integer): [非必填] 酒店级别(1-5)
if (EmptyUtils.isNotEmpty(vo.getHotelLevel())) {
solrQuery.addFilterQuery("hotelLevel:" + vo.getHotelLevel() + "");
}
//featureIds (String): [非必填] 酒店特色id
if (EmptyUtils.isNotEmpty(vo.getFeatureIds())) {
StringBuilder buffer = new StringBuilder("(");
int flag = 0;
//特色 前台是复选框,可以勾选多个作为查询条件
// 123,125,127
String featureIdArray[] = vo.getFeatureIds().split(",");
for (String featureId : featureIdArray) {
if (flag == 0) {
buffer.append(" featureIds:" + "*," + featureId + ",*");
} else {
buffer.append(" OR featureIds:" + "*," + featureId + ",*");
}
flag++;
}
buffer.append(")");
solrQuery.addFilterQuery(buffer.toString());
}
//tradeAreaIds (string): [非必填] 商圈id
if (EmptyUtils.isNotEmpty(vo.getTradeAreaIds())) {
StringBuilder buffer = new StringBuilder("(");
int flag = 0;
//前台是复选框,可以勾选多个作为查询条件
String tradeAreaIdArray[] = vo.getTradeAreaIds().split(",");
for (String tradeAreaId : tradeAreaIdArray) {
if (flag == 0) {
buffer.append(" tradingAreaIds:" + "*," + tradeAreaId + ",*");
} else {
buffer.append(" OR tradingAreaIds:" + "*," + tradeAreaId + ",*");
}
flag++;
}
buffer.append(")");
solrQuery.addFilterQuery(buffer.toString());
}
//maxPrice (number): [非必填] 最高价
if (EmptyUtils.isNotEmpty(vo.getMaxPrice())) {
solrQuery.addFilterQuery("minPrice:" + "[* TO " + vo.getMaxPrice() + "]");
}
//minPrice (number): [非必填] 最低价
if (EmptyUtils.isNotEmpty(vo.getMinPrice())) {
solrQuery.addFilterQuery("minPrice:" + "[" + vo.getMinPrice() + " TO *]");
}
//ascSort (string): [非必填] 按照某个字段升序排
// 取值为(isOkCount或avgScore或minPrice或hotelLevel)
// isOkCount-最受欢迎 avgScore-评分 minPrice-价格 hotelLevel-星级
//点下升序排,在点下就按降序排
if (EmptyUtils.isNotEmpty(vo.getAscSort())) {
solrQuery.addSort(vo.getAscSort(), SolrQuery.ORDER.asc);
}
//descSort (string): [非必填] 按照某个字段降序排
// 取值为(isOkCount或avgScore或minPrice或hotelLevel)
// isOkCount-最受欢迎 avgScore-评分 minPrice-价格 hotelLevel-星级
if (EmptyUtils.isNotEmpty(vo.getDescSort())) {
solrQuery.addSort(vo.getDescSort(), SolrQuery.ORDER.desc);
}
}
solrQuery.setStart((vo.getPageNo()-1)*vo.getPageSize());
solrQuery.setRows(vo.getPageSize());
QueryResponse response = client.query(solrQuery);
Integer total = Math.toIntExact(response.getResults().getNumFound());
List<ItripHotelVO> voList = response.getBeans(ItripHotelVO.class);
Page<ItripHotelVO> page = new Page<ItripHotelVO>(vo.getPageNo(),vo.getPageSize(),total);
page.setRows(voList);
return page;
好博客就要一起分享哦!分享海报
他的专栏
他感兴趣的技术

新业务
springboot学习
ssm框架课
vue学习
【带小白】java基础速成