使用Gradle和SpringBoot集成Solr7.4

之前按照公司要求,为了提高搜索的准确性、广泛性以及用户体验,研究了一下Solr技术并添加到了自己的项目中。在网上看了好多博客的文章,根据前辈的经验得到了很多指点,但是也跳了不少坑。今天回顾老代码,决定做一下笔记,自己码一篇文章,希望能够帮到奋斗在一线的开发人员。想必各位看官既然能翻到这篇文章,一定是已经对Solr有所了解,所以这里不再阐述,直接上干货,搭建Solr环境并将创建的Solr工程。

一、首先列出来搭建Solr服务器所需要的基本工具
1、基本环境 :JDK1.8(solr7.4默认jdk1.8+);
2、框架 :SpringBoot(内置集成Tomcat};
3、开发工具:IDEA;
4、管理工程:Gradle;
5、全文搜索引擎Solr:solr7.4;
附:
(1)、Solr-7.4.0安装包的百度网盘下载地址:https://pan.baidu.com/s/1uetXcon7BDw1QAIYfurLew 提取码:u8px
(2)、Solr-7.4.0安装包的官网下载地址:http://lucene.apache.org/solr/downloads.html

注:在进行接下来的工作之前,一定要确保你的jdk环境以及开发配置可以正常运作。

二、开始搭建Solr服务器

1、首先将下载的solr-7.4.0.zip进行解压,随便一个文件夹都可以,最好是有意义、易于自己后期查找的文件夹,此处本人就解压到了当前文件夹。最好不要是解压到中文名的文件夹,后期95%会出错。
在这里插入图片描述

2、在solr7.4/server/solr下创建一个core
在这里插入图片描述

3、将solr7.4/dist目录下的solr-dataimporthandler-7.4.0.jar、
solr-dataimporthandler-extras-7.4.0.jar和mysql-connector-java-8.0.11.jar(这个自己弄)复制到/solr-7.4.0/server/solr-webapp/webapp/WEB-INF/lib下

4、将solr-7.4.0/server/solr/configsets/_default下的conf文件复制一份到你新建的core目录下

在这里插入图片描述
在这里插入图片描述
5、在solr7.4/server/solr/zhanhong_core下创建一个data,data和你复制过来的conf同级
在这里插入图片描述
6、在solr7.4/server/solr/zhanhong_core/conf/创建data-config.xml,里面写上如下代码(自己按需求更改mysql相关和document标签下的数据库对应字段)

<?xml version="1.0" encoding="UTF-8"?> 
<dataConfig>
    <dataSource name="source1" type="JdbcDataSource"
              driver="com.mysql.jdbc.Driver"              url="jdbc:mysql://localhost:3306/live?useSSL=true&amp;serverTimezone=UTC"
              user="root"
              password="root" />
    <document>
        <entity name="recharge_record" dataSource="source1" pk="id"
            query="SELECT * FROM recharge_record">
            <field column='id' name='id' />
            <field column='uid' name='uid' />
            <field column='tradeNo' name='tradeNo' />
            <field column='productId' name='productId' />
            <field column='money' name='money' />
            <field column='payType' name='payType' />
            <field column='payStatus' name='payStatus' />
            <field column='remark' name='remark' />
            <field column='createTime' name='createTime' />
            <field column='confirmTime' name='confirmTime' />
        </entity>
    </document>
</dataConfig>

7、修改solr7.4/server/solr/zhanhong_core/conf/下的solrconfig.xml,在
标签上添加

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
       <lst name="defaults">
          <str name="config">data-config.xml</str>
       </lst>
</requestHandler>

结果如下图:
在这里插入图片描述
8、修改solrconfig.xml下的如图
在这里插入图片描述
9、在solr7.4/server/solr/zhanhong_core/conf/下的managed-schema文件中添加data-config.xml里面所添加的字段
在这里插入图片描述

10、win+r启动cmd,进入solr7.4/bin目录下执行solr start -p 8080(执行solr start,默认是8983端口),solr stop -all停止solr运行

11、进入浏览器输入localhost:8080,就会进入solr管理界面
①:点击Core Admin
在这里插入图片描述
②:上图所述步骤完成后点击Core Selector的一个下拉框,就可以看到红色框中的东西
在这里插入图片描述
③:点击Dataimport,完成红框中操作,如果使用solrj代码实现,此操作可忽略
在这里插入图片描述
12、使用solrj,打开idea创建gradle工程,添加solrj7.4jar

org.apache.solr:solr-solrj:7.4.0

三、代码来一波
①:controller层代码如下

@Controller
public class solrj {

    @Autowired
    SolrjService solrjService;

    private static final String solrUrl = "http://localhost:8080/solr/zhanhong_core";

    //创建solrClient同时指定超时时间,不指定走默认配置
    private static HttpSolrClient client = new HttpSolrClient.Builder(solrUrl)
            .withConnectionTimeout(10000)
            .withSocketTimeout(60000).build();

    @RequestMapping("/query")
    @ResponseBody
    public List<Object> querySolr() throws Exception {
        //封装查询参数
        SolrQuery query = new SolrQuery("*:*");
        //添加回显内容
        query.addField("id");
        query.addField("tradeNo");
        query.addField("productId");
        query.addField("money");
        query.addField("payType");
        query.addField("payStatus");
        query.addField("remark");
        query.addField("createTime");
        query.addField("confirmTime");
        query.setRows(20);
        //执行查询返回QueryResponse
        QueryResponse response = client.query(query);
        //获取doc文档
        SolrDocumentList documents = response.getResults();
        List<Object> list = new ArrayList<>();
        for (SolrDocument solrDocument : documents) {
           list.add(solrDocument);
        }
        client.close();
        return list;
    }

    @RequestMapping("/add")
    public void solrAdd() throws Exception {
        //创建文档doc
        List<RechargeRecord> list = solrjService.solrAdd();
        for (RechargeRecord rechargeRecord:list) {
            SolrInputDocument doc = new SolrInputDocument();
            doc.addField("id",rechargeRecord.getId() );
            doc.addField("uid",rechargeRecord.getUid() );
            doc.addField("tradeNo",rechargeRecord.getTradeNo() );
            doc.addField("productId",rechargeRecord.getProductId());
            doc.addField("money",rechargeRecord.getMoney() );
            doc.addField("payType",(rechargeRecord.getPayType()==1?"支付宝":(rechargeRecord.getPayType()==2?"微信":(rechargeRecord.getPayType()==3?"银联":"出现问题,请稍后"))) );
            doc.addField("payStatus",(rechargeRecord.getPayStatus()==1?"未支付":(rechargeRecord.getPayStatus()==2?"支付成功":(rechargeRecord.getPayStatus()==3?"支付失败":"出现问题,请稍后"))) );
            doc.addField("remark",rechargeRecord.getRemark() );
            doc.addField("createTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format( rechargeRecord.getCreateTime()));
            doc.addField("confirmTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(rechargeRecord.getConfirmTime()));
            //添加到client
            UpdateResponse updateResponse = client.add(doc);
        }
        //索引文档必须commit
        client.commit();
        //client.close();
    }

    @RequestMapping("/delete")
    public void solrDelete()throws Exception{
        //1:通过id删除
        //client.deleteById("63");
        //2:通过文档存在id list删除
        SolrQuery query = new SolrQuery("id:*");
        query.addField("id");
        QueryResponse response = client.query(query);
        SolrDocumentList documents = response.getResults();
        List<String> ids = new ArrayList<>();
        for (SolrDocument solrDocument:documents) {
            ids.add(solrDocument.get("id").toString());
        }
        client.deleteById(ids);
        //3:通过查询信息删除
        /*client.deleteByQuery("id:63");*/
        client.commit();
        client.close();
}
}

②:service和mapper层代码只进行简单查询就不写了。
③:点击Query,结果如下
在这里插入图片描述
四、总结
1、关于Solr服务器的搭建,以及导入数据、简单的查询,本文已经介绍完了。目前依然在研究这个东西,在以后的文章中会陆续更新关于Solr的技术点,也希望各位能够多多指点,共同进步。

2、Solr服务器搭建过程的难点、繁琐点:各个目录下的jar包的移动,以及各个目录下的各种xml文件的配置,最主要的是各层级目录要关联正确,大家多练习几次,相信都可以熟练地进行搭建部署!

3、关于Solr集群搭建后续这边会慢慢给大家完善!!!
案例代码:https://gitee.com/fansha/solr.git
参考:https://www.cnblogs.com/frankdeng/p/9615856.html

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值