A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

1.在虚拟机里安装solr,可以通过官网下载solr的linux的安装包解压之后,添加/etc/sysconfig/iptables中的端口号8983(solr默认)
2.Solr的安装:
    第一步:解压压缩文件:
   [root@localhost Desktop]# tar -zvxf solr-7.3.1.tgz  -C /opt/
    第二步:启动solr
    [root@localhost Desktop]# /opt/solr-7.3.1/bin/solr start -force
    第三步:测试 在浏览器中输入http://localhost:8983/solr
       如果出现AdminUI界面 正确,否则失败
    第四步:创建Admin Core
      出现bug了:
      修复:
     [root@localhost Desktop]# cp -rf /opt/solr-7.3.1/server/solr/configsets/_default/conf/  /opt/solr-7.3.1/server/solr/new_core/
    移动配置文件到新建的new_core中
    修复完成之后,重新创建new_core 则成功
3.启动之后windows浏览器通过ip:8983访问solr页面
注意:在往solr中存数据的时候那个实体类必须有一个String类型的id字段,同时加上solr下的field注解,这样在存入solr中的id就是数据库里的id值



  •         @Field



  •         private String id;



  •         @Field



  •         private String sid;



  •         @Field



  •         private String sname;



  •         @Field



  •         private Double sprice;



  •         @Field



  •         @DateTimeFormat(pattern="yyyy-MM-dd")



  •         private Date stime;


4.solr在spring中需要注入两个实体类,一个是往虚拟机连接的类,一个是solr的模板类



  • <!-- 配置solr工厂 获取Solr的客户端对象 -->



  •     <bean id="solrClientFactory" class="org.springframework.data.solr.server.support.HttpSolrClientFactoryBean">



  •         <property name="url" value="http://192.168.133.131:8983/solr"/>



  •         <property name="timeout" value="15000"/>



  •         <property name="maxConnections" value="100"/>



  •     </bean>



  •    <!-- 操作solr的简化的模版对象 -->



  •     <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">



  •         <constructor-arg index="0" ref="solrClientFactory"/>



  •     </bean>


高亮显示:
这里有一个solr的工具类:封装了solr的ACDI操作



  • public class SolrUtil {



  •         //单例模式的懒汉式



  •         //1.私有化的静态类属性



  •         private static SolrUtil solrUtil;



  •         //2.私有化的构造函数



  •         private SolrUtil() {



  •         }



  •         //3.对外提供公共的访问方法



  •         public static SolrUtil getSolrUtil(){



  •                 if(solrUtil==null){



  •                         return new SolrUtil();



  •                 }



  •                         return solrUtil;



  •         }







  •         private static String coreName = "new_core";



  •         /**



  •          * 添加集合数据



  •          *



  •          * @param entities



  •          */



  •         public void initData(SolrTemplate solrTemplate,List entities) {



  •                 solrTemplate.setSolrCore(coreName);



  •                 solrTemplate.saveBeans(entities);



  •                 solrTemplate.commit(coreName);



  •         }







  •         /**



  •          * 往solr里添加数据



  •          * @param solrTemplate solr的模板对象



  •          * @param obj 添加的那条对象



  •          */



  •         public void insertBean(SolrTemplate solrTemplate,Object obj) {



  •                 solrTemplate.setSolrCore(coreName);



  •                 solrTemplate.saveBean(obj);



  •                 solrTemplate.commit(coreName);



  •         }







  •         /**



  •          * 根据Id从solr中删除一条数据



  •          * @param solrTemplate



  •          * @param id 要删除的那条Id



  •          */



  •         public void deleteBean(SolrTemplate solrTemplate,String id) {



  •                 solrTemplate.setSolrCore(coreName);



  •                 solrTemplate.deleteById(coreName,id);



  •                 solrTemplate.commit(coreName);



  •         }







  •         /**



  •          * 从solr中根据Id批量删除数据



  •          * @param solrTemplate



  •          * @param ids



  •          */



  •         public void deleteBeans(SolrTemplate solrTemplate,Collection ids) {



  •                 solrTemplate.setSolrCore(coreName);



  •                 solrTemplate.deleteById(coreName,ids);



  •                 solrTemplate.commit(coreName);



  •         }







  •         /**



  •          * 从solr中修改数据,首先根据Id删除这条数据,在添加修改后的这条数据



  •          * @param solrTemplate



  •          * @param id



  •          * @param obj



  •          */



  •         public void updateBeans(SolrTemplate solrTemplate,String id,Object obj) {



  •                 solrTemplate.setSolrCore(coreName);



  •                 solrTemplate.deleteById(coreName,id);



  •                 solrTemplate.saveBean(obj);



  •                 solrTemplate.commit(coreName);



  •         }







  •         /**



  •          * 查询



  •          * 从solr里查询全部数据



  •          * @param model 用来装载数据发向前台



  •          * @param solrTemplate solr模板对象,用来查询处理solr数据



  •          * @param cpage 当前页



  •          * @param pageSize 分页单位



  •          * @param mohu 要高亮查询的字段



  •          * @param clazz 往solr里用来查询的对象的class对象 ,反射用



  •          * @param fieldName 查询高亮显示的字段



  •          * @param listdName 向前台发送集合的名称



  •          * @throws Exception



  •          */



  •         public void selectObjects(Model model, SolrTemplate solrTemplate, Integer cpage,



  •                         Integer pageSize, String mohu, Class clazz, String fieldName,String listName) throws Exception {



  •                 // 声明返回值变量



  •                 List entities = new ArrayList<>();   



  •                 // 计算开始记录数



  •                 Integer startIndex = (cpage - 1) * pageSize;



  •                 // 设置操作core



  •                 solrTemplate.setSolrCore(coreName);



  •                 // 高亮查询条件



  •                 HighlightQuery query = new SimpleHighlightQuery();



  •                 // 开始记录数



  •                 query.setOffset(startIndex);



  •                 // 显示条数



  •                 query.setRows(pageSize);



  •                 // 设置条件



  •                 Criteria criteria = new Criteria(fieldName);



  •                 // 判断查询条件是否为空



  •                 if(mohu!="" && mohu!=null){



  •                         if(mohu.contains(" ")){



  •                                 String[] split = mohu.split(" ");



  •                                 criteria.contains(split);



  •                         }else if(mohu.contains(",")){



  •                                 String[] split = mohu.split(",");



  •                                 criteria.contains(split);



  •                         }else{



  •                                 criteria.contains(mohu);



  •                         }



  •                 }



  •                 // 条件条件处理



  •                 query.addCriteria(criteria);







  •                 // 设置高亮的参数处理对象



  •                 HighlightOptions highlightOptions = new HighlightOptions();



  •                 highlightOptions.addField(fieldName);



  •                 highlightOptions.setSimplePrefix("<font color='red'>");



  •                 highlightOptions.setSimplePostfix("</font>");



  •                 query.setHighlightOptions(highlightOptions);







  •                 // 执行高亮查询



  •                 HighlightPage highlightPage = solrTemplate.queryForHighlightPage(query, clazz);



  •                 // 获取总页数



  •                 Integer pageCount = highlightPage.getTotalPages();



  •                 // 获取当前页数据



  •                 List<HighlightEntry> highlighted = highlightPage.getHighlighted();



  •                 // 获取高亮对象



  •                 for (HighlightEntry cc : highlighted) {



  •                         Object entity = cc.getEntity();



  •                         // 获取高亮显示的结果



  •                         List<Highlight> highlights = cc.getHighlights();



  •                         // 设置高亮显示的值



  •                         if (highlights != null && highlights.size() > 0 && highlights.get(0) != null



  •                                         && highlights.get(0).getSnipplets() != null && highlights.get(0).getSnipplets().size() > 0) {



  •                                 // 获取字段名称



  •                                 Field field = clazz.getDeclaredField(fieldName);



  •                                 // 设置高亮处理



  •                                 field.setAccessible(true);



  •                                 field.set(entity, highlights.get(0).getSnipplets().get(0));



  •                         }



  •                         // 添加到集合中



  •                         entities.add(entity);



  •                 }







  •                 // 存储到model域中



  •                 model.addAttribute("cpage", cpage);  



  •                 model.addAttribute("pageCount", pageCount);



  •                 model.addAttribute("mohu", mohu);



  •                 model.addAttribute(listName, entities);



  •         }



  • }




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马