Solr,
1、solr是什么?
Solr是基于Lucene的,Lucene 支持强大的匹配能力,如短语,通配符,连接,分组和更多不同的数据类型。
2、为什么要solr?
- solr是将整个索引操作功能封装好了的搜索引擎系统(企业级搜索引擎产品);
- solr可以部署到单独的服务器上(WEB服务),它可以提供服务,我们的业务系统就只要发送请求,接收响应即可,降低了业务系统的负载;
- solr部署在专门的服务器上,它的索引库就不会受业务系统服务器存储空间的限制;
- olr支持分布式集群,索引服务的容量和能力可以线性扩展。
3、solr服务的搭建和IK分词器的配置在此略过。。。后期添加
4、代码应用,写入solr服务
5、从solr服务查询
//从索引库里面获取商品信息,现在这个dao层是从索引库获取信息,因为之前的写的逻辑是将db里面的数据导入到索引库。后面的查询都是从索引库中进行,而不从数据库了
@Repository
public class SearchDaoImpl implements SearchDao {
@Autowired
private SolrServer solrServer;
@Override
public SearchResult search(SolrQuery query) throws Exception {
//这是从索引库里面,直接执行查询
QueryResponse response = solrServer.query(query);
//获取查询的结果
SolrDocumentList documentList= response.getResults();
SearchResult result=new SearchResult();
//这是获取总记录数
result.setRecordCount(documentList.getNumFound());
List<Item> itemList=new ArrayList<>();
//商品的高亮显示,即当鼠标移到字上时,该字体变色,这是从QueryResponse中获取的
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
for (SolrDocument solrDocument : documentList) {
//每个SolrDocument都是一个商品pojo的内容,所以这里要创建一个商品的pojo对象,来获取详细的字段
Item item=new Item();
item.setId((String) solrDocument.get("id"));
//高亮显示是title的高亮显示
List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
String title="";
if (list!=null && list.size()>0) {
title=list.get(0);
}
else{
title=(String) solrDocument.get("item_title");
}
item.setTitle(title);
item.setPrice((Long) solrDocument.get("item_price"));
item.setImage((String) solrDocument.get("item_image"));
item.setCategory_name((String) solrDocument.get(" item_category_name"));
item.setSell_point((String) solrDocument.get("item_sell_point"));
itemList.add(item);
}
result.setItemList(itemList);
return result;
}
}
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。