packagecom.fan.utils;importcom.fan.pojo.Goods;importorg.apache.log4j.Logger;importorg.apache.solr.client.solrj.SolrQuery;importorg.apache.solr.client.solrj.SolrServerException;importorg.apache.solr.client.solrj.impl.HttpSolrClient;importorg.apache.solr.client.solrj.response.QueryResponse;importorg.apache.solr.client.solrj.response.UpdateResponse;importorg.apache.solr.common.SolrInputDocument;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;/*** @ClassName SolrUtils
* @Description TODO
* @Author Fan
* @Date 2019/11/25 14:05
* @Version 1.0*/
public classSolrUtils {static Logger logger = Logger.getLogger(SolrUtils.class);private static HttpSolrClient httpSolrClient = null;privateSolrUtils(String solrUrl) {/*** 构建httpSolrClient请求对象,solrUrl参数必须到core路径*/httpSolrClient= newHttpSolrClient.Builder(solrUrl).build();
}/*** @Description: 增加/修改
* @Param: [goods]
*@return: void
* @Author: Fan
* @Date: 2019/11/25 14:24*/
publicString addGoods(Goods goods) {
UpdateResponse response= null;/*** 构建一个document*/SolrInputDocument solrInputDocument= newSolrInputDocument();
solrInputDocument.setField("id",goods.getId());
solrInputDocument.setField("goodsname",goods.getGoodsname());
solrInputDocument.setField("description", goods.getDescription());try{
response=httpSolrClient.add(solrInputDocument);
logger.info("增加响应:" +response);
httpSolrClient.commit();
}catch(SolrServerException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}returnresponse.toString();
}/*** @Description: 查询列表
* @Param: []
*@return: java.util.List
* @Author: Fan
* @Date: 2019/11/25 15:51*/
public ListgetGoodsList() {
List goodsList = new ArrayList<>();
SolrQuery queryParam= newSolrQuery();//queryParam.set("q","*:*"); 全部查询
queryParam.set("q","goodsname:*"); //设置相关查询字段
queryParam.addFilterQuery("goodsname:手机"); //fq 设置过滤字段
queryParam.addFilterQuery("price:[1 TO 10000]"); //fq 设置价格过滤
queryParam.addSort("price", SolrQuery.ORDER.desc); //设置排序,根据price
queryParam.setStart(0); //设置分页
queryParam.setRows(15);/** 高亮设置*/queryParam.setHighlight(true); //开启高亮
queryParam.addHighlightField("goodsname"); //设置高亮字段
queryParam.setHighlightSimplePost(""); //设置高亮样式
queryParam.setHighlightSimplePost("");try{
QueryResponse queryResponse=httpSolrClient.query(queryParam);
logger.info("查询响应:" +queryResponse.toString());
queryResponse.getResults().stream().forEach(document->{
Goods goods= newGoods();
goods.setId(document.get("id").toString());
goods.setGoodsname(document.get("goodsname").toString());
goods.setPrice((Float) document.get("price"));
goods.setDescription(document.get("description").toString());
goodsList.add(goods);
});
}catch(SolrServerException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}returngoodsList;
}/*** @Description: 删除根据id
* @Param: [id]
*@return: void
* @Author: Fan
* @Date: 2019/11/25 15:51*/
publicString deleteGoodsById(String id) {
UpdateResponse updateResponse= null;try{
updateResponse=httpSolrClient.deleteById(id);
logger.info("删除响应:" +updateResponse);
httpSolrClient.commit();
}catch(SolrServerException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}returnupdateResponse.toString();
}public staticSolrUtils getInstance(String solrUrl) {return newSolrUtils(solrUrl);
}public static voidmain(String[] args) {
SolrUtils solrUtils= SolrUtils.getInstance("http://127.0.0.1:8983/solr/goods_core");
Goods goods= newGoods();
goods.setId("4");
goods.setGoodsname("努比亚手机2.0");
goods.setPrice(1200.0f);
goods.setDescription("比红绿机强");
solrUtils.addGoods(goods);
solrUtils.getGoodsList().parallelStream().forEach(item->{
System.out.println(item.toString());
});
solrUtils.deleteGoodsById("4");
}
}