solr安装配置以及使用数据库同步数据至solr引擎

solr安装配置以及使用数据库同步数据至solr引擎

本文目录

一、solr简介

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。
用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器。
同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。


二、安装环境以及版本

solr是java开发的,安装solr需要有jdk,
使用Tomcat部署,需要安装Tomcat

软件版本
jdk1.8
solr4.10.3
tomcat8.5.7

三、安装JDK

略(傻瓜式安装)


四、安装tomcat

  • 新建文件夹solr_my2
  • 复制一个tomcat到该目录下
    在这里插入图片描述

  • 解压
    tar -zxvf apache-tomcat-8.5.70\ (1).tar.gz

在这里插入图片描述


  • 启动测试下(注意由于没有修改端口,使用的是8080,如有冲突,请自行百度修改tomcat的端口)
    在这里插入图片描述

  • 成功启动
    在这里插入图片描述

五、安装solr

  • 安装包可以百度
    在这里插入图片描述

  • 解压
    tar -zxvf solr-4.10.3.tgz.tgz
    在这里插入图片描述


PS(我没使用):进入solr-4.10.3/example目录有start.jar,可以使用java -jar
start.jar启动内置的jetty服务器,从而启动solr服务


把solr部署到Tomcat

  • 停止之前运行的Tomcat
    在这里插入图片描述

  • 删除Tomcat的webapps文件夹所有文件,并创建solr文件夹
    在这里插入图片描述

  • 复制solr解压目录的solr.war到Tomcat中
    在这里插入图片描述

在这里插入图片描述


  • 解压solr.war
    在这里插入图片描述

  • 删除war包
    在这里插入图片描述

  • 把solr-4.10.3/example/lib/ext目录下的所有的jar包,添加到solr工程中
[root@ithouse-01 ROOT]# cd /usr/local/solr_my2/solr-4.10.3/example/lib/ext/
[root@ithouse-01 ext]# cp * /usr/local/solr_my2/apache-tomcat-8.5.70/webapps/solr/WEB-INF/lib/
  • 加入配置文件到solr工程中

注:只有一个log4j文件,classes文件夹是自己创建的


[root@ithouse-01 ext]# cd /usr/local/solr/solr-4.10.3/example/resources/
[root@ithouse-01 resources]# cp * /usr/local/solr/apache-tomcat-8.5.70/webapps/solr/WEB-INF/classes/

在这里插入图片描述


  • 创建solrhome
    /example/solr目录就是一个solrhome。复制此目录到/usr/local/solr/solrhome

在这里插入图片描述


  • 关联solr及solrhome
    需要修改solr工程的web.xml文件

在这里插入图片描述


  1. 删除注释
  2. 修改第43行,指定solrhome地址(42行的solr/home是固定写法,不能修改)

  • 启动tomcat
[root@ithouse-01 example]# /usr/local/solr_my2/apache-tomcat-8.5.70/bin/startup.sh

在这里插入图片描述

  • solr安装成功

六、配置中文分词器

搜索商品标题需要中文分词,需要配置中文分词器IK

  • 停止tomcat
[root@ithouse-01 example]# /usr/local/solr_my2/apache-tomcat-8.5.70/bin/shutdown.sh

  • 上传中文分词器jar包
    在这里插入图片描述

  • 复制IKAnalyzer的配置文件和自定义词典和停用词词典到Tomcat服务
    在这里插入图片描述

  • 内容大致如下
    在这里插入图片描述

  • IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
<properties>  
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 	-->
	<entry key="ext_dict">ext.dic;</entry> 

	<!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords">stopword.dic;</entry> 
	
</properties>

  • 配置schema.xml文件
<!-- IKAnalyzer-->
    <fieldType name="text_ik" class="solr.TextField">
      <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
    </fieldType>

<!--IKAnalyzer Field-->
<field name="content_ik" type="text_ik" indexed="true" stored="true" /> 

在这里插入图片描述

  • 重启tomcat生效(可以先不启动)

七、配置业务域

  • 根据数据库的表的字段来书写字段名,以及类型
    在这里插入图片描述

  • 重新启动tomcat

八、springboot项目(maven也行)使用solr

  • 创建一个maven项目,或者springboot项目,然后导入jar包,以及数据库驱动jar
    在这里插入图片描述

  • 创建一个测试类
package cn.solr;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class SolrAction {
    public static void main(String[] args) {
        querySolr();
    }
    //solr地址
    private static String solrUlr="http://172.16.248.201:8080/solr";
    /*增 从数据库中查询数据插入到solr引擎中*/
    public static void addSolr(){

        HttpSolrServer httpSolrServer=new HttpSolrServer(solrUlr);
        List<SolrInputDocument> listSolr=new ArrayList<>();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url="jdbc:mysql://localhost/ebuy?useUnicode=true&characterEncoding=utf-8";
            Connection connection= DriverManager.getConnection(url,"root","123");
            String sql="select * from easybuy_product";
            PreparedStatement ps=connection.prepareStatement(sql);
            ResultSet rs=ps.executeQuery();
            while (rs.next()){
                SolrInputDocument solrInputDocument=new SolrInputDocument();
                solrInputDocument.addField("id",rs.getString("ep_id"));
                solrInputDocument.addField("ep_name",rs.getString("ep_name"));
                solrInputDocument.addField("ep_price",rs.getLong("ep_price"));
                solrInputDocument.addField("ep_image",rs.getString("ep_file_name"));
                solrInputDocument.addField("epc_id",rs.getLong("epc_id"));
                listSolr.add(solrInputDocument);
            }

            rs.close();
            ps.close();
            connection.close();

        }catch (Exception e){
            e.printStackTrace();
        }
        try {
            httpSolrServer.add(listSolr);
            httpSolrServer.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /*删 删除solr引擎库中指定、全部的数据*/
    public static void delSolr(){
        HttpSolrServer httpSolrServer=new HttpSolrServer(solrUlr);
        //1.根据主键id删除
        try {
            httpSolrServer.deleteById("1172680");
            httpSolrServer.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //2.根据指定字段指定值删除
//        try {
//            httpSolrServer.deleteByQuery("ep_name:锤子");
//            httpSolrServer.commit();
//        } catch (SolrServerException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
        //3.删除全部数据
//        try {
//            httpSolrServer.deleteByQuery("*:*");
//            httpSolrServer.commit();
//        } catch (SolrServerException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
    }
    /*查 查询solr引擎库中的指定条件的数据*/
    public static void querySolr(){

        HttpSolrServer httpSolrServer=new HttpSolrServer(solrUlr);
        //创建solr的query对象
        SolrQuery solrQuery=new SolrQuery();
        //设置查询条件
        solrQuery.setQuery("ep_name:华为");
        //设置起始数据位置
        solrQuery.setStart(0);
        //设置查询的条数
        solrQuery.setRows(10);
        //设置高亮
        solrQuery.setHighlight(true);//开启高亮
        solrQuery.addHighlightField("ep_name");//指定高亮增强的solr字段
        //设置高亮增强的样式
        solrQuery.setHighlightSimplePre("<font color=\"red\">");
        solrQuery.setHighlightSimplePost("</font>");
        //查询数据
        QueryResponse queryResponse=null;
        try {
            queryResponse= httpSolrServer.query(solrQuery);
            //拿到查询结果集
            SolrDocumentList results= queryResponse.getResults();
//            System.out.println(results);
            System.out.println("搜索回来的条数为"+results.getNumFound());
            Map<String, Map<String, List<String>>> map= queryResponse.getHighlighting();
            System.out.println(map);
            // 解析查询结果
            for (SolrDocument solrDocument : results) {
                System.out.println("----------------------------------------------------");
                System.out.println(solrDocument);
                // 获取高亮数据
                List<String> list = map.get(solrDocument.get("id")).get("ep_name");
                // 显示高亮
                if (list != null && list.size() > 0) {
                    System.out.println("商品名称1:" + list.get(0));
                } else {
                    System.out.println("商品名称2:" + solrDocument.get("ep_name"));
                }
                System.out.println(solrDocument.get("id"));
                System.out.println(solrDocument.get("ep_price"));
                System.out.println(solrDocument.get("ep_image"));
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}


  • 查询详解
    在这里插入图片描述

在这里插入图片描述


  • 至此便是结束了!!!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
回答: 要配置Solr定时器,你需要进行以下步骤:首先,在solrhome/dist中找到solr-dataimporthandler-5.5.0.jar,solr-dataimporthandler-extras-5.5.0.jar,solr-core-5.5.0.jar三个包,将它们一并复制到solrhome/server/lib中。然后,在solrconfig.xml文件中添加以下代码片段:<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"><lst name="defaults"><str name="config">data-config.xml</str></lst></requestHandler>[2如果已经存在请求处理程序节点,你需要在其后面添加以下配置:<requestHandler name="/dataimport" class="solr.DataImportHandler"><lst name="defaults"><str name="config">data-config.xml</str></lst></requestHandler>[3这样就完成了Solr定时器的配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [solr安装笔记与定时器任务](https://blog.csdn.net/weixin_34050005/article/details/92981244)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [Linux下安装Solr7.2.1以及配置Solr(CentOS7)](https://blog.csdn.net/weixin_42400413/article/details/83143176)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吕努力变强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值