简介
Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。- 基于开放接口(XML和HTTP)的标准进行索引创建和查询 (基于Lucene通过HTTP请求进行数据索引管理)
- 可伸缩性-能够有效地复制到另外一个Solr搜索服务器
- 附带了一个基于HTTP管理界面
- Solr与Lucene 并不是竞争对立关系,恰恰相反Solr 依存于Lucene,因为Solr底层的核心技术是使用Lucene 来实现的。Lucene专注于搜索底层的建设,而Solr专注于企业应用
- Solr内嵌Jetty和ZooKeeper。
SolrCloud模式是基于ZooKeeper的,会自动启动ZooKeeper服务。 - 官网:https://lucene.apache.org/solr/
- 官方教程、solr-7.2-pdf
- 各版本下载地址(本文基于
solr-7.2.0进行说明,需要jdk1.8及以上)
相关概念
collection/core均指以不同的数据结构来对数据进行索引(索引库、集合)schema为一个xml配置文件,主要用于配置字段和字段类型,动态字段等。(如某个字段可忽略大小写也可在其中配置)
安装及使用 ^1
下载解压说明
- 下载tar包解压
tar -zxvf solr-7.2.1.tgz -C /opt/soft,目录说明 example几个solr的实例serversolr的核心应用程序solr-webapp为solr提供的控制面板resources日志配置solr/configsets全局配置文件(有_default和sample_techproducts_configs两种)。SolrCloud模式启动后选择此其中一种模式(应该在启动前对此目录下文件进行配置),普通模式启动需要复制其中的配置文件到相应实例目录sample_techproducts_configs/conf/managed-schema配置(添加)字段、字段类型、动态字段等信息sample_techproducts_configs/conf/solrconfig.xml配置sorl相关服务,如classpath配置、增加导入db数据访问端点等
启动停止服务
- 配置IK中文分析器/DB数据导入需要在启动前配置好
- 初始化solr集合
- 以
SolrCloud模式启动./bin/solr start -e cloud(因权限可强制启动./bin/solr start -e cloud -force)- 启动时会询问相关配置,
[]中即为默认配置(默认启动2个solr节点,分别为8983、7574)。其他使用默认;solr配置项使用sample_techproducts_configs,集合名称也可再此时配置 - SolrCloud模式创建的集合instanceDir在
/example/cloud/node1/solr/aezocn_shard1_replica_n1等目录下创建
- 启动时会询问相关配置,
- 普通默认启动
./bin/solr start- 此时需要添加Core。需要先在
/server/solr创建对应的instanDir,并将/server/solr/configsets/_default/conf目录下所有文件拷贝到instanDir目录下
- 此时需要添加Core。需要先在
- 以
- 访问
http://localhost:8983/solr即可看到solr的管理面板 - 停止服务
./bin/solr stop -all停止全部solr./bin/solr stop -p 8983停止8983端口的solr
- 重启服务
./bin/solr start -c -p 8983 -s example/cloud/node1/solr -force启动node1,其中-s后面接solr.home(此时会启动一个内嵌的ZooKeeper服务)
./bin/solr start -c -p 7574 -s example/cloud/node2/solr -z localhost:9983 -force启动node2,其中-z localhost:9983为连接ZooKeeper的配置
配置IK中文分析器
- 需要在启动前配置好,
SolrCloud模式启动为例 - 资源下载
ik-analyzer-solr5-5.x.jar和solr-analyzer-ik-5.1.0.jar复制到/server/solr-webapp/webapp/WEB-INF/lib目录下- 在
/server/solr-webapp/webapp/WEB-INF下创建classes目录 将
IKAnalyzer.cfg.xml(如下)、stopword.dic(分割词,如”的”等。每行一个)、ext.dic(每行一个,可为空文件)复制到classes目录下1
2
3
4
5
6
7
8
9
10
11xml version="1.0" encoding="UTF-8"
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ext.dic;</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">stopword.dic;</entry>
</properties>编辑
server/solr/configsets/sample_techproducts_configs/conf/managed-schema在</schema>前加如下代码1
2
3
4
5
6<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<!-- 示例(此时非必须)。添加一个字段desc,类型为text_ik。只有创建类似这种字段才能进行中文分词 -->
<field name="desc" type="text_ik" indexed="true" stored="true" multiValued="false" />
同步db数据 ^3
- 将以下jar包复制到
/server/solr-webapp/webapp/WEB-INF/lib目录下- solr-dataimporthandler-7.2.1.jar(在dist目录中)
- solr-dataimporthandler-extras-7.2.1.jar
- mysql-connector-java-5.1.43.jar
在配置文件
server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml末尾加入如下代码(基于SolrCloud模式的sample_techproducts_configs配置)1
2
3
4
5<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>新增配置文件
server/solr/configsets/sample_techproducts_configs/conf/data-config.xml1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.6.1:3306/test"
user="root"
password="root" />
<document>
<!-- 此处可以有多个entity,entity也可以嵌套。dataimporter.request.id为控制面板中Dataimport-Custom Parameters的传入参数 -->
<!-- deltaQuery/deltaImportQuery为增量更新的sql -->
<entity name="test_solr"
pk="id"
transformer="DateFormatTransformer"
query="SELECT id, `name`, `desc`, update_time FROM test_solr WHERE id >= ${dataimporter.request.id}"
deltaQuery="select id from test_solr where update_time > '${dih.last_index_time}'"
deltaImportQuery="SELECT id, `name`, `desc`, update_time FROM test_solr where id='${dih.delta.id}'">
<!-- column为数据库字段,name为managed_schema里配置的字段 -->
<field column='update_time' name="last_modified" dateTimeFormat='yyyy-MM-dd HH:mm:ss' />
</entity>
</document>
</dataConfig>- 可能会连接数据库失败,可在控制面板的
Logging中查看日志。常见如:"Host '192.168.6.131' is not allowed to connect to this MySQL server"
- 可能会连接数据库失败,可在控制面板的
- 编辑
server/solr/configsets/sample_techproducts_configs/conf/managed-schema在</schema>中加入<field name="desc" type="text_ik" indexed="true" stored="true" multiValued="false" />来进行中文存储(在可在控制面板中进行添加) - 加载配置文件,参考下文【solr相关命令】
- 控制面板中进行数据导入,参考下文【控制面板-collection】
Command=full-import;Entity=test_solr;Dataimport-Custom Parameters传入id=1表示导入所有id>1的数据- 增量更新主要看
update_time字段值是否比dataimport.properties中last_index_time的值大。此时最好去掉clean的勾选,否则全导入后update_time未变更的记录将被删除 - 或者访问
http://192.168.6.131:8983/solr/aezocn/dataimport?command=delta-import进行数据导入
- 查询数据
http://192.168.6.131:8983/solr/aezocn/select?q={!term f=desc}中国人
控制面板
- 访问
http://localhost:8983/solr/aezocn/browse为查询前端界面(类似百度搜索) - 点击cloud查看集合分片节点信息:collection(aezocn)分成两片(shard1、shard2),且每片都对应两个节点(192.168.6.131:8983、192.168.6.131:7574)
Logging日志。如数据导入出错会在此处打印日志
collection(aezocn)
Dataimportdb数据同步Command分为full-import(全导入)和delta-import(增量导入)
Documentspost文档数据Query检索common-q输入检索词汇,支持""、+、-等符号
Schema字段配置,添加字段等
solr相关命令
1 | ## **`SolrCloud`配置文件加载** |
Client APIs
1 | <dependency> |
参考文章
