您的位置 首页 java

springMVC中solr的简单实现步骤

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
第三步:测试 在浏览器中输入
如果出现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="#34;/>
        <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>  
springMVC中solr的简单实现步骤

高亮显示:
这里有一个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);
}
}  
springMVC中solr的简单实现步骤

文章来源:智云一二三科技

文章标题:springMVC中solr的简单实现步骤

文章地址:https://www.zhihuclub.com/196431.shtml

关于作者: 智云科技

热门文章

网站地图