Solr服务器的简单使用

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容