一. solr的环境: java8的安装
solr基于java, solr 8 以上的版本 需要java8的支持
二. solr的安装和启动
step 1: 获取下载包
镜像云 搜 apache -> lucene -> solr
https://mirrors.huaweicloud.com/apache/lucene/solr/8.6.1/solr-8.6.1.tgz
step2: 下载
cd /opt
wget https://mirrors.huaweicloud.com/apache/lucene/solr/8.6.1/solr-8.6.1.tgz
Step3: 解压并进入文件目录
tar xf solr-8.6.1.tgz
cd solr-8.6.1
Step5: 启动
solr默认启动端口8983. 注意在云服务器的网页安全组那块 暴露端口号
bin/solr start -force
Step6 - 检查运行状态
bin/solr status
如果运行正常 可以访问页面 http://localhost:8983/solr/
其他命令
重启 bin/solr restart -force
停止 bin/solr stop -all
查看版本 bin/solr version 日志文件位置: 知道日志文件在什么位置 非常非常重要
/opt/solr-8.6.1/server/logs
三. 导入数据
Step 1 - 创建core
在/opt/solr-8.6.1/server/solr 目录下创建一个文件夹 将来这个文件夹的名字需要和 admin页面创建的core的名称一致
cd /opt/solr-8.6.1/server/solr
mkdir deviceplan
# 然后为了保证核心能创建成功,将以下路径下的conf文件夹拷贝到你所创建的核心文件夹中
cp -rf /opt/solr-8.6.1/server/solr/configsets/sample_techproducts_configs/conf /opt/solr-8.6.1/server/solr/deviceplan/
接下来登陆SolrAdmin进行创建核心(前提要根据第三步启动solr)
访问:http://localhost:8983/solr 进行addcore
如果没有启动 cd /opt/solr-8.6.1 bin/solr start -force 启动solr
注意:前两个方框里的内容要一致并且名称要和你创建的核心文件夹名称一致
然后点击add core ,核心就创建成功了
到这里solr就已经搭建好了
step 2 - 引入ik分词器
将ik分词器压缩包解压,解压后的文件上传至服务器
此命令需要windows里面执行 在 ik解压缩包所在的目录使用git bash here
scp -r ikanalyzer-solr5 ssh1:/opt
如果没有设置免密登录 ssh1替换为 root@公网ip
然后将解压出来的两个jar包放到以下路径:
/opt/solr-8.6.1/server/solr-webapp/webapp/WEB-INF/lib
使用如下命令
cp -rf /opt/ikanalyzer-solr5/*.jar /opt/solr-8.6.1/server/solr-webapp/webapp/WEB-INF/lib
#使用如下命令查看是否复制成功
ls /opt/solr-8.6.1/server/solr-webapp/webapp/WEB-INF/lib | grep ik
其它的三个文件放到以下路径:
/opt/solr-8.6.1/server/solr-webapp/webapp/WEB-INF/classes
如果没有这个classes文件夹 就去到这个目录(web-inf) 创建这个文件夹就ok
cd /opt/solr-8.6.1/server/solr-webapp/webapp/WEB-INF
mkdir classes
cp -f /opt/ikanalyzer-solr5/IKAnalyzer.cfg.xml /opt/solr-8.6.1/server/solr-webapp/webapp/WEB-INF/classes
cp -f /opt/ikanalyzer-solr5/stopword.dic /opt/solr-8.6.1/server/solr-webapp/webapp/WEB-INF/classes
cp -f /opt/ikanalyzer-solr5/ext.dic /opt/solr-8.6.1/server/solr-webapp/webapp/WEB-INF/classes
#查看是否复制成功
ls /opt/solr-8.6.1/server/solr-webapp/webapp/WEB-INF/classes
然后进行ik分词器的配置,编辑以下路径的managed-schema文件
如果是往solr里面添加第二个core 需要进行下面的配置
# 进入step 1 中你创建的那个代表core的文件夹
cd /opt/solr-8.6.1/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 标签外
到这里ik分词器就配置好了
step 3 - 从数据库导入数据
第一步:导入相关包:
在创建的核心目录下新建lib
文件夹(如果有,无需建立),从Solr源码包的dist文件夹中导入两个solr-dataimporthandler
包,以及一个mysql
驱动包。
如果没有lib包 cd /opt/solr-8.6.1/server/solr/deviceplan mkdir lib
core目录, 核心目录
cd /opt/solr-8.6.1/server/solr/deviceplan/lib
cp -f /opt/solr-8.6.1/dist/solr-dataimporthandler-8.6.1.jar /opt/solr-8.6.1/server/solr/deviceplan/lib
cp -f /opt/solr-8.6.1/dist/solr-dataimporthandler-extras-8.6.1.jar /opt/solr-8.6.1/server/solr/deviceplan/lib
# ls命令 可以查看到导入的两个包
ls
#下载mysql驱动包
wget https://mirrors.huaweicloud.com/repository/maven/mysql/mysql-connector-java/8.0.21/mysql-connector-java-8.0.21.jar
第二步:编辑以下路径中的solrconfig文件(emms为自己所创建的核心文件夹):
cd /opt/solr-8.6.1/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 标签
然后在本目录下的data-config.xml进行如下编辑(没有则创建):
vi data-config.xml
添加如下内容
注意 必须有一个字段的名称为id 这是schema.xml文件中的强制要求
<?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&serverTimezone=Hongkong&characterEncoding=UTF-8&tinyInt1isBit=false"
user="root" password="123456"/>
<document>
<!-- document entity -->
<entity name="news" query="SELECT * 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"/>
</entity>
</document>
</dataConfig>
然后在当前目录的managed-schema文件的末尾加入相应的类型映射
vi managed-schema
扩展: vi在一般模式下 按 shift + g 其实也就是按下大写的g 就会回到文件模块 按下gg 就会回到文件开头
<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" />
重启 solr
cd /opt/solr-8.6.1
bin/solr restart -force
登陆http://localhost:8983/solr/,进入以下模块,执行excute就导入数据了
四. 查询数据
common q中的查询语法
*:*
# 字段名称: 字段关键值
但是一次只能在一个字段名称中写 肯定是不方便的
在schema中加入复合字段
<field name="product_multi_search" type="text_ik" indexed="true" stored="true" multiValued="true" />
<copyField source="product_name" dest="product_multi_search"/>
<copyField source="product_description" dest="product_multi_search"/>
fq添加范围限定
product_price:[10 TO 20]
product_price: 10
Sort
product_price desc
product_price asc
Fl 查询哪些字段
product_catalog, product_catalog_name
hl 高亮设置
#高亮字段
hl.fl
product_multi_search
hl.simple.pre
<em>
hl.simple.post
</em>