solr使用教程 solr能做什么



文章插图
solr使用教程 solr能做什么

文章插图
1.在虚拟机里安装solr,可以通过官网下载solr的linux的安装包解压之后,添加/etc/sysconfig/iptables中的端口号8983(solr默认)2.Solr的安装:第一步:解压压缩文件:[[email protected] Desktop]# tar -zvxf solr-7.3.1.tgz -C /opt/第二步:启动solr[[email protected] Desktop]# /opt/solr-7.3.1/bin/solr start -force第三步:测试 在浏览器中输入http://localhost:8983/solr如果出现AdminUI界面 正确,否则失败第四步:创建Admin Core出现bug了:修复:[[email protected] 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值
@Fieldprivate String id;@Fieldprivate String sid;@Fieldprivate String sname;@Fieldprivate Double sprice;@[email protected](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="http://www.mnbkw.com/jxjc/189933/15000"/><property name="maxConnections" value="http://www.mnbkw.com/jxjc/189933/100"/></bean><!-- 操作solr的简化的模版对象 --><bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate"><constructor-arg index="0" ref="solrClientFactory"/></bean>
高亮显示:这里有一个solr的工具类:封装了solr的ACDI操作
【solr使用教程 solr能做什么】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;// 设置操作coresolrTemplate.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);}}