public class SearchServiceImpl implements SearchService {
@Autowired
private SolrServer solrServer;
public void selectPaginationByQuery(String keyword
,Long brandId,String price) throws Exception{
StringBuilder params = new StringBuilder();
//索引条件
SolrQuery solrQuery = new SolrQuery();
//关键词
// solrQuery.set("q", "name_ik:" + keyword);
solrQuery.setQuery(keyword);
params.append("keyword=").append(keyword);
//TODO 过滤条件
if(null != brandId){
solrQuery.addFilterQuery("brandId:" + brandId);
params.append("&brandId=").append(brandId);
}
//价格区间 0-99 1600
if(null != price){
String[] p = price.split("-");
if(p.length == 2){
solrQuery.addFilterQuery("price:[" + p[0] + " TO " + p[1] + "]");
}else{
solrQuery.addFilterQuery("price:[" + p[0] + " TO *]");
}
params.append("&price=").append(price);
}
//TODO 高亮
//1:打开高亮的开关
solrQuery.setHighlight(true);
//2:设置需要高亮的域
solrQuery.addHighlightField("name_ik");
//3:高亮的前缀 后缀
solrQuery.setHighlightSimplePre("<span style='color:red'>");
solrQuery.setHighlightSimplePost("</span>");
//分页
solrQuery.setStart(1);
solrQuery.setRows(10);
//排序
solrQuery.setSort("price", ORDER.desc);
//指定默认查询的域 default field
solrQuery.set("df", "name_ik");
//指定要查询什么域 field list
solrQuery.set("fl", "id,name_ik,price,url");
//执行查询
QueryResponse response = solrServer.query(solrQuery);
//获取高亮
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
//1: Map K id V : map
//2: Map K name_ik V list
//3: list apache 不一个 多值 本次只有一个值 list.get(0)
//结果集
SolrDocumentList docs = response.getResults();
//总条数
long numFound = docs.getNumFound();
//创建商品结果 集
List<Product> products = new ArrayList<>();
for (SolrDocument doc : docs) {
Product product = new Product();
//商品ID
String id = (String) doc.get("id");
product.setId(Long.parseLong(id));
//商品名称
Map<String, List<String>> map = highlighting.get(id);
List<String> list = map.get("name_ik");
// String name = (String) doc.get("name_ik");
product.setName(list.get(0));
//价格
product.setPrice((Float) doc.get("price"));
//图片
String url = (String) doc.get("url");
product.setImgUrl(url);
//添加到集合中
products.add(product);
}
}