solr教程从入门到精通(solr和elasticsearch的区别)

1.在虚拟机里安装solr,可以通过官网下载solr的linux的安装包解压之后,添加/etc/sysconfig/iptables中的端口号8983(solr默认)2.Solr的安装:第一步:解压压缩文件:[root@localhostDeskt

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;

solr教程从入门到精通(solr和elasticsearch的区别)

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和elasticsearch的区别)

高亮显示:
这里有一个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);
}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/26136.html

(0)
新劵
上一篇 2021-09-17
下一篇 2021-09-17

相关推荐

  • 制作多系统共存U盘启动(u盘多系统启动盘制作)

    装机神器——Ventoy告别反复格U盘本期主题:制作多系统并存的ISO启动引导.需要工具:ventoy、U盘一个官网下载ventoy-1.0.21-windows.zip然后解压。解压ventoy-1.0.21-windows

    2021-12-11 科技
    0
  • 日本首相有任期限制吗(日本首相是怎么选举的)

    相信大家也注意到了日本的首相是更迭非常频繁的,因此就让大家比较好奇日本首相有任期限制吗,为什么近日菅义伟表示不会参加接下来到来的自民党总裁选举了,日本首相是怎么选举的,日本首相是怎么产生的,那么接下来大家就随久久派小编一起了解看看~日本首相有任期限制吗日本首

    2021-09-03
    0
  • win7我的电脑图标没了怎么办(win7桌面上没有我的电脑)

    我们在使用win7系统电脑的过程中或多或少都会遇到一些问题,最近有用户表示自己在使用电脑时发现我的电脑图标不见了,怎么显示我的电脑图标?针对用户提出的问题,今天小编就和大家分享一下win7系统找不到我的电脑图标的应对办法,大家快来看看吧。

    2021-12-11 科技
    0
  • 电子驾驶证等同于实体驾驶证吗(电子驾驶证等同本子驾照吗)

    电子驾驶证是比较受关注的一个电子凭证,每个人都可以通过官方平台申请电子驾驶证,它可以处理各种各样的汽车业务,大大方便了人们的出行,很多人都会申请电子驾驶证。电子驾驶证并不能等同于纸质的驾驶证,在一些场合中还是需要使用纸质

    2021-09-03
    0
  • 2021国家扶持新型环保项目(国家扶持新型环保项目有哪些)

    最近这几年全球生态环境都称下降趋势,大家对于环保的概念也开始重视,而环保行业也逐渐开始发展,国家对于部分环保项目也是有各类扶持的,那么2021国家扶持新型环保项目有哪些呢?下面就跟久久派小编来详细了解一下吧!2021国家扶持新型环保项目1、节能新技术和装备

    2021-09-01
    0
  • 电子驾驶证要钱吗需要交费吗(办理电子驾驶证要多少钱)

    电子驾驶证是目前比较流行的一个电子凭证,它在一定程度上可以起到和纸质驾驶证一样的作用,也可以办理相关汽车业务,比如处理违章、开车上路等等,电子驾驶证一般是在网上申请的,这个是免费的,不需要花钱的。电子驾驶证要钱吗不要钱,

    2021-09-06
    0

发表回复

登录后才能评论