solr安装

solr安装

一. solr的环境: java8的安装

solr基于java, solr 8 以上的版本 需要java8的支持

二. solr的安装和启动

step 1: 获取下载包

镜像云 搜 apache -> lucene -> solr

step2: 下载

cd /opt
wget https://repo.huaweicloud.com/apache/lucene/solr/8.11.2/solr-8.11.2.tgz

Step3: 解压并进入文件目录

tar xf solr-8.11.2.tgz
cd solr-8.11.2

Step5: 启动

solr默认启动端口8983. 注意在云服务器的网页安全组那块 暴露端口号

bin/solr start -force

Step6 - 检查运行状态

bin/solr status

如果运行正常 可以访问页面 http://localhost:8983/solr/

其他命令

日志文件位置

三. 导入数据

Step 1 - 创建core

在/opt/solr-8.11.2/server/solr 目录下创建一个文件夹

将来这个文件夹的名字需要和 admin页面创建的core的名称一致

cd /opt/solr-8.11.2/server/solr
mkdir deviceplan
# 然后为了保证核心能创建成功,将以下路径下的conf文件夹拷贝到你所创建的核心文件夹中
cp -rf /opt/solr-8.11.2/server/solr/configsets/sample_techproducts_configs/conf /opt/solr-8.11.2/server/solr/deviceplan/
输入ls deviceplan/conf
如果有许多文件 表明复制成功

接下来登陆SolrAdmin进行创建核心(前提要根据第三步启动solr)

访问:http://localhost:8983/solr 进行addcore

如果没有启动 cd /opt/solr-8.11.2 bin/solr start -force 启动solr

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PwjfQv2A-1688010122531)(solr%E5%AE%89%E8%A3%85%20af2619dd0adb487b999b2dee84c39316/Untitled.png)]

注意:前两个方框里的内容要一致并且名称要和你创建的核心文件夹名称一致

然后点击add core ,核心就创建成功了

到这里solr就已经搭建好了

step 2 - 引入ik分词器

将ik分词器压缩包解压,解压后的文件上传至服务器

链接:

百度网盘 请输入提取码

提取码:5hom

此命令需要windows里面执行 在 ik解压缩包所在的目录使用git bash here

scp .\ikanalyzer-solr5.zip fujian:/home/ubuntu
#登录服务器
mv /home/ubuntu/ikanalyzer-solr5.zip /opt
# 解压
cd /opt
unzip ikanalyzer-solr5.zip -d ikanalyzer-solr5

如果没有设置免密登录 ssh1替换为 root@公网ip

然后将解压出来的两个jar包放到以下路径:

/opt/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/lib

使用如下命令

cp -rf /opt/ikanalyzer-solr5/*.jar /opt/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/lib
#使用如下命令查看是否复制成功
ls /opt/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/lib | grep ik

其它的三个文件放到以下路径:

/opt/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/classes

使用命令查看目录下是否存在classes文件夹

cd /opt/solr-8.11.2/server/solr-webapp/webapp/WEB-INF
ls
#如果没有classes文件夹 执行创建下面的这句创建命令
mkdir classes

#将三个文件复制到classes下
cp -f /opt/ikanalyzer-solr5/IKAnalyzer.cfg.xml  /opt/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/classes
cp -f /opt/ikanalyzer-solr5/stopword.dic  /opt/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/classes
cp -f /opt/ikanalyzer-solr5/ext.dic  /opt/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/classes
#查看是否复制成功
ls /opt/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/classes

然后进行ik分词器的配置,编辑以下路径的managed-schema文件

# 进入step 1 中你创建的那个代表core的文件夹
cd /opt/solr-8.11.2/server/solr/deviceplan/conf
vi managed-schema

将以下配置放到文件最后

<fieldType name="text_ik" class="solr.TextField">

    <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>

    <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

不要越到 schema 标签外

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FGcpF1Ob-1688010122532)(solr%E5%AE%89%E8%A3%85%20af2619dd0adb487b999b2dee84c39316/Untitled%201.png)]

到这里ik中文分词器就配置好了

测试ik分词器

重启solr

cd /opt/solr-8.11.2/

bin/solr restart -force

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WBlgP0jQ-1688010122533)(solr%E5%AE%89%E8%A3%85%20af2619dd0adb487b999b2dee84c39316/Untitled%202.png)]

注意: 如何定制专有名词, 编辑配置文件, 在里面加入的内容会被自动当成一个词汇

:/opt/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/classes/ext.dic

记得改完后重启solr

step 3 - 从数据库导入数据

第一步:导入相关包:

在创建的核心目录下新建lib文件夹(如果有,无需建立),从Solr包的dist文件夹中导入两个solr-dataimporthandler包,以及一个mysql驱动包。

如果没有lib包

cd /opt/solr-8.11.2/server/solr/deviceplan/lib
cp -f /opt/solr-8.11.2/dist/solr-dataimporthandler-8.11.2.jar /opt/solr-8.11.2/server/solr/deviceplan/lib
cp -f /opt/solr-8.11.2/dist/solr-dataimporthandler-extras-8.11.2.jar /opt/solr-8.11.2/server/solr/deviceplan/lib
# ls命令 可以查看到导入的两个包
ls

#下载mysql驱动包
wget https://mirrors.huaweicloud.com/repository/maven/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar

第二步:编辑以下路径中的solrconfig文件(emms为自己所创建的核心文件夹):

cd /opt/solr-8.11.2/server/solr/deviceplan/conf
vi solrconfig.xml

在文件末尾添加以下内容

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

不要越过 /config 标签

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vHyK3qtL-1688010122533)(solr%E5%AE%89%E8%A3%85%20af2619dd0adb487b999b2dee84c39316/Untitled%203.png)]

然后在本目录下的data-config.xml进行如下编辑(没有则创建):

vi data-config.xml

添加如下内容

注意 必须有一个字段的名称为id 这是schema.xml文件中的强制要求

注意: 粘贴xml如果出现了不对齐的情况, :q! 强制退出, 重新编辑

不要按i, 先输入 :set paste 然后再按 i进入插入模式, 然后粘贴

<?xml version="1.0" encoding="UTF-8" ?>

<dataConfig>
    <!-- db info -->
    <dataSource type="JdbcDataSource"
        driver="com.mysql.cj.jdbc.Driver"
        url="jdbc:mysql://112.123.156.213:3306/emms?useUnicode=true&amp;serverTimezone=Hongkong&amp;characterEncoding=UTF-8&amp;tinyInt1isBit=false"
        user="root" password="123456"/>
    <document>
        <!-- document entity -->
        <entity name="news" query="select DevPlanID, JctID, DevName ,DevType , DATE_FORMAT(PlanDate , '%Y-%m-%dT%TZ') PlanDate from elec_device_plan;">
            <!-- db field map solr field -->
            <field column="DevPlanID" name="id"/>
            <field column="JctID" name="product_JctID"/>
            <field column="DevName" name="product_DevName"/>
            <field column="DevType" name="product_DevType"/>
            <field column="PlanDate" name="product_PlanDate"/>
        </entity>
    </document>
</dataConfig>

扩展: mysql中的日期格式的数据存储到solr中, solr中的日期数据格式被强制要求为如下格式: 2022-12-10T00:00:00Z

然后在当前目录的managed-schema文件的末尾加入相应的类型映射

vi managed-schema

扩展: vi在一般模式下 按 shift + g 其实也就是按下大写的g 就会回到文件模块 按下gg 就会回到文件开头

注意: mysql中date对应到solr是pdate, double对应pdouble, long对应plong

<field name="product_JctID" type="string" indexed="true" stored="true" />
<field name="product_DevName" type="text_ik" indexed="true" stored="true"  />
<field name="product_DevType" type="string" indexed="true" stored="true"  />
<field name="product_PlanDate" type="pdate" indexed="true" stored="true"  />

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k5Hf6AnO-1688010122535)(solr%E5%AE%89%E8%A3%85%20af2619dd0adb487b999b2dee84c39316/Untitled%204.png)]

重启 solr

cd /opt/solr-8.11.2
bin/solr restart -force

登陆http://ip:8983/solr/,进入以下模块,执行excute就导入数据了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y31oIaTd-1688010122535)(solr%E5%AE%89%E8%A3%85%20af2619dd0adb487b999b2dee84c39316/Untitled%205.png)]

四. 查询数据

点击左侧栏目的query

common q中的查询语法

*:*
# 字段名称: 字段关键值

但是一次只能在一个字段名称中写 肯定是不方便的

在managed-schema中加入复合字段

vi /opt/solr-8.11.2/server/solr/deviceplan/conf/managed-schema

<field name="product_multi_search" type="text_ik" indexed="true" stored="true" multiValued="true" />

<copyField source="product_DevName" dest="product_multi_search"/>
<copyField source="product_DevType" dest="product_multi_search"/>

注意: multiValued标为true的字段, 是复合字段, 这个字段本身不存在, 他是将别的字段融合到了自己这块

重启solr

bin/solr restart -force

重新点击数据导入

fq添加范围限定

product_price:[10 TO 20]
product_price: 10

Sort

product_price desc
product_price asc

Fl 查询哪些字段

product_catalog, product_catalog_name

日期的范围查询

日期格式必须是: 2022-12-15T00:00:00Z

product_PlanDate:[2022-12-15T00:00:00Z TO 2022-12-17T00:00:00Z]

hl 高亮设置(纯了解性, 前端内容)

#高亮字段
hl.fl
product_multi_search

hl.simple.pre
<em>

hl.simple.post
</em>

java操作solr

添加一个solrj依赖

			<dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>8.11.2</version>
        </dependency>

查询测试代码

    @Test
    public void test1() throws SolrServerException, IOException {

        String solrUrl = "http://81.70.199.213:8983/solr/deviceplan";

        HttpSolrClient solrClient = new HttpSolrClient.Builder()
                .withBaseSolrUrl(solrUrl).build();

        //测试能否连接
        //SolrPingResponse ping = solrClient.ping();
        //System.out.println("ping = " + ping);

        //solr替代设备计划表的所有功能

        //设备计划 CRUD

        //查询
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery("*:*");
        solrQuery.setSort("product_PlanDate", SolrQuery.ORDER.desc);
        solrQuery.setStart(0);
        solrQuery.setRows(2);

        QueryResponse queryResponse = solrClient.query(solrQuery);

        System.out.println("queryResponse = " + queryResponse);

        //可以将查询结果映射到对应的对象中
        //solr结果 => java对象
        List<ElecDevicePlan> devicePlans = queryResponse.getBeans(ElecDevicePlan.class);

        System.out.println("devicePlans = " + devicePlans);

        //这个数据相当于 jdbc那块的  resultset
        //SolrDocumentList results = queryResponse.getResults();
        //for (SolrDocument result : results) {
        //    Object o = result.get("product_DevName");
        //    System.out.println("o = " + o);
        //}

    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

繁星-赵老师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值