solr的简单实现步骤

307 阅读3分钟

在虚拟机里安装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);



  • }



  • }



更多技术资讯可关注:gzitcast