solr服务器的搭建
1.1 下载ZIP包:http://mirrors.shuosc.org/apache/lucene/solr/7.1.0/ (没有找到6.6.1的版本了)
1.2 解压,进入在solr-7.1.0\bin目录下,在此处打开命令行 输入solr start 运行solr服务器,默认在8983端口
1.3 访问 http://127.0.0.1:8983/solr 看能否进入solr控制台,能则启动成功
1.4 运行solr服务器之后,首先需要创建一个core;创建命令solr create -c <coreName> 如 solr create -c mycore
solr服务器的配置(solr6.6.1版本+mysql数据库)
- solr-6.6.1\server\solr\mycore\conf\managed-schema
保存的是字段信息,可以通过solr admin UI来添加字段;也可以手动在此文件中添加(推荐)
<field name="id" type="long" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="content" type="string" indexed="true" stored="true"/>
- solr-6.6.1\server\solr\mycore\conf\db-data-config.xml
保存的是连接数据库的驱动信息以及导入数据的SQL语句,包括增量查询
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/grdd_test" user="root" password="root" />
<document>
<entity name="test"
query="select * from user"
deltaQuery="select id from user where gmt_modified > '${dataimporter.test.last_index_time}'"
deltaImportQuery="select * from user where id='${dih.delta.id}'" />
<!--
query:查询数据库表符合记录数据。
deltaQuery:增量索引查询主键ID,注意这个只能返回ID字段,注意dataimporter.test.last_index_time这个值,
这个表达式dataimporter.test是根据conf/dataimport.properties文件中的数据来的不要test也行
deltaImportQuery:增量索引查询导入的数据
solr本身提供了一个last_index_time,这个字段记录了每条记录导入的时间(包括增量和全量导入),
我们只需要将updateTime和last_index_time比较即可得到上一次索引更新以后变化的记录。
注意,这个的updateTime为数据库里面的一个字段,规定每次更新字段都会更新这个值,否则没有意义
-->
</document>
</dataConfig>
- solr-6.6.1\server\solr\mycore\conf\solrconfig.xml
保存的是增删查改等操作,以及所需的第三方jar包,这个文件需要修改的是添加一个dataimport类型的requestHandler节点(在select之前),
可能需要在文件相应位置导入相应的jar包,如下:
<!-- line75左右 -->
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
....
<!-- 数据导入配置,在 “/select”之前 -->
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
-
solr-6.6.1\server\solr\mycore\conf\dataimport.properties
保存的是一个最后导入数据的时间,用于增量查询,与数据库数据中的gmt_modified数据进行对比,决定是否需要更新 -
solr-6.6.1\server\solr\conf\dataimport.properties
(注意路径与上面的不同) 这个文件保存的是定时增量导入的配置信息
#################################################
# #
# dataimport scheduler properties #
# #
#################################################
# to sync or not to sync
# 1 - active; anything else - inactive
syncEnabled=1
# 需要同步的core
syncCores=mycore
# solr server name or IP address
server=127.0.0.1
# solr server port
port=8983
# application name/context
webapp=solr
# URL params [mandatory]
# remainder of URL
params=/dataimport?command=delta-import&clean=false&commit=true
# schedule interval
# number of minutes between two runs
# [defaults to 30 if empty]
interval=1
# 重做索引的时间间隔,单位分钟,默认7200,即5天;
# 为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200
# 重做索引的参数
reBuildIndexParams=/dataimport?command=delta-import&clean=false&commit=true
# 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
# 两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00
这里还有一个配置:solr-6.6.1\server\solr\mycore\core.properties 这个是自动生成的
此文件唯一标识一个core,主要配置为name,以key=value的形式存储,可为空,默认core的名字为文件夹的名字
solr服务器检索core的规则:
1. 在web.xml中找到solr/home对应的路径,默认为\server\solr\目录
2. 递归遍历该文件夹,遇到core.properties 文件则跳出该级目录,然后遍历一下个目录
-
solr-6.6.1\server\solr\mycore\conf\下面创建一个lib文件夹,将mysql的jdbc jar包放进去
-
solr-6.6.1\server\solr-webapp\webapp\WEB-INF\lib下面需要导入的包
7.1. apache-solr-dataimportscheduler-1.1.jar 附百度云链接
https://pan.baidu.com/s/1qYPxi5u 密码:4kxy
定时增量查询的jar包,需要定时增量查询功能时导入 同时需要在solr-6.6.1\server\solr-webapp\webapp\WEB-INF\web.xml文件中添加一个listener,如下
<listener>
<listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>
</listener>
7.2 solr-dataimporthandler-6.6.1.jar、solr-dataimporthandler-extras-6.6.1.jar 导入数据必须的包,这两个包在solr-6.6.1\dist目录下,拷贝过来就行
在spring boot项目中使用solr
- 导入依赖
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
</dependency>
- 在application.properties文件中配置solr服务器地址
spring.data.solr.host=http://127.0.0.1:8983/solr
- 然后就可以像使用spring jpa一样来操作了
3.1: 创建一个repository接口,继承SolrCrudReposity. 然后定义所需要的方法,可参考:https://docs.spring.io/spring-data/solr/docs/current/reference/html/#_supported_query_keywords
3.2: 创建一个实体类,需要在实体类上使用注解,表明对应的是solr中的哪一个core
@SolrDocument(solrCoreName = "mycore")
3.3: 在测试类中注入创建的repository接口,直接调用其方法
在java中用最原始的方法使用solr
//solr服务器地址
String solrServerUrl = "http://127.0.0.1:8983/solr";
//solr core名称
String solrCoreName = "mycore";
//1. 初始化一个solrClient实例,SolrClient为抽象类,有两个实现类HttpSolrClient, CloudSolrClient
SolrClient solrClient1 = new HttpSolrClient(solrServerUrl);
//2. 设置查询条件
SolrQuery query = new SolrQuery();
query.set("q", "sex:true");
//...其他条件
//3. 发起查询请求
QueryResponse response = solrClient1.query(solrCoreName,query);
//4. 处理请求数据
System.out.println(response);
下一篇:Solr统一配置MySQL数据源
参考文档:
https://docs.spring.io/spring-data/solr/docs/current/reference/html/
https://lucene.apache.org/solr/guide/6_6/index.html
https://zhuanlan.zhihu.com/p/28855188
网友评论