欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Solr服务器的简单使用

程序员文章站 2022-03-15 10:15:27
...

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数据库)

  1. 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"/>
  1. 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>
  1. 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>
  
  1. solr-6.6.1\server\solr\mycore\conf\dataimport.properties
    保存的是一个最后导入数据的时间,用于增量查询,与数据库数据中的gmt_modified数据进行对比,决定是否需要更新

  2. 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 文件则跳出该级目录,然后遍历一下个目录
  1. solr-6.6.1\server\solr\mycore\conf\下面创建一个lib文件夹,将mysql的jdbc jar包放进去

  2. 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

  1. 导入依赖
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-solr</artifactId>
    </dependency>
  1. 在application.properties文件中配置solr服务器地址
spring.data.solr.host=http://127.0.0.1:8983/solr
  1. 然后就可以像使用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

转载于:https://www.jianshu.com/p/015038090b49