Solr入门

  • Solr入门介绍
    • 一、下载与安装
      • 1、下载
        • 1.1下载solr
        • 1.2 下载IKAnalyzer中文分词器
      • 2、解压
    • 二、运行solr
    • 三、创建core实例
    • 四、配置schema
    • 五、DIH导入数据
    • 六、solrJ(java客户端)
    • 七、配置定时实时重建索引和增量更新

Solr入门介绍

本文版本采用solr7.4.0 + ikanalyzer-solr5 + solr-dataimport-scheduler进行solr入门环境搭建,sorl ik分词器分词,solr数据库数据导入,solr同步等技术实现及配置。

一、下载与安装

1、下载

1.1下载solr

 https://lucene.apache.org/solr/ 到官网点击Download下载

1.2 下载IKAnalyzer中文分词器

2、解压

下载完成后会得到一个压缩包,解压后会获得一个solr_7.4.0文件夹,此文件夹目录结构如下图:

二、运行solr

Solr的运行分为单机运行和集群运行,这里以单机为例:

  1.  在bin目录下执行bin/solr start 此命令会启动solr应用服务器默认端口为8983,如果想指定端口号启动可以加参数–p例 如:solr start –p 8888.
    

2.如图这句提示出现后证明服务启动成功(启动过程中如果打印java异常堆栈log4j2.xml 文件名、目录名或卷标语法不正确。没有关系不妨碍我们正常使用solr可以忽略此问题)

3.接下来在浏览器输入http://localhost:8983/可以进入Admin UI界面验证是否启动成功如下图

4.solr常用命令
solr start -p 端口号 单机版启动solr服务
solr restart -p 端口号 重启solr服务
solr stop -p 端口号关闭solr服务
solr create -c name 创建一个core实例(core概念后面介绍),name为实例名

此外有关于solr集群版启动方式和其他更多的命令可以参看官方文档
https://lucene.apache.org/solr/guide/7_4/solr-control-script-reference.html

三、创建core实例

  1.  core简介:简单说core就是solr的一个实例,一个solr服务下可以有多个core,每个core下都有自己的索引库和与之相应的配置文件,所以在操作solr创建索引之前要创建一个core,因为索引都存在core下面。
    
  2.  core创建:core的创建方式有很多种一下列出两种比较方便的。
    

(1) 在bin目录下执行solr create -c name,创建一个core,默认创建出来的位置如下图


(2)第二种方式是直接使用AdminUI页面创建一个core,如下图

四、配置schema

  1.  schema简介:schema是用来告诉solr如何建立索引的,他的配置围绕着一个schema配置文件,这个配置文件决定着solr如何建立索引,每个字段的数据类型,分词方式等,现在新版本的schema配置文件的名字叫做managed-schema,他的配置方式是使用schemaAPI来配置,官方给出的解释是使用schemaAPI修改managed-schema内容后不需要重新加载core或者重启solr更适合在生产环境下维护,如果使用手工编辑的方式更改配置不进行重加载core有可能会造成配置丢失,配置文件所在的路径如下图:
    


2. 添加fieldType

<fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100"><analyzer type="index"><tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="false"/></analyzer><analyzer type="query"><tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="false"/></analyzer>
</fieldType>
  1. 添加field
<field name="text_cn" type="text_cn" indexed="true" stored="false" multiValued="true"/>
  1. 中文分词器IKAnalyzer这是第三方的一个分词器可以很好的扩展中文词库,IKAnalyzer下载后解压会有如下文件

    将核心jar包复制到solr WEB应用的lib文件夹下,如下图

    把配置文件和词库等文件复制到WEB应用的classes文件夹下,如果子WEB-INF下没有这个文件夹自己创建即可,如下图

    如果想要扩展词库可以在ext.dic文件中配置自定义的中文词组,例如:抖音这个词组,这个分词器的算法是算不出来的但是通过我们自定义词库,分词器也可以把抖音列出关键词。

    接下来我们来验证下ik分词器,如下图:
    重启solr restart -p 8983,访问localhost:8983

五、DIH导入数据

1、 DIH简介:

DIH全称是Data Import Handler 数据导入处理器,顾名思义这是向solr中导入数据的,我们的solr目的就是为了能让我们的应用程序更快的查询出用户想要的数据,而数据存储在应用中的各种地方入xml、pdf、关系数据库中,那么solr首先就要能够获取这些数据并在这些数据中建立索引来达成快速搜索的目的,这里就列举我们最常用的从关系型数据库中向solr导入索引数据。
2. 在我们自己建立的core的目录下有conf目录,这里面有着几个很重要的配置文件,之前我们用到的managed-schema,另外还有一个solrconfig.xml文件,这是我们DIH配置的第一步,需要在此文件中配置数据导入文件的映射位置如下图:

solrconfig.xml 中加入DIH jar包依赖

第二步配置数据导入文件,这个文件可以在solr根目录下的示例文件中copy一份到core/conf目录下,也就是跟solrconfig.xml在一个目录下,因为solrconfig.xml中配置的相对路径就是这里,当然也可以写绝对路径。如下图:
Copy过去之后这个文件名可以自定义,我就改成了MyDataConfig.xml,下面开始配置如下图:

<dataConfig><dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/springboot" user="root" password="123456" /><document><entity name="user" query="select * from user"><field column="id" name="id" /><field column="username" name="username" /><field column="name" name="name" /><field column="email" name="email" /></entity></document>
</dataConfig>

(1)首先配置数据源关系型数据库基本四项,驱动类,url,用户名,密码。

(2)配置document,可以把它当作与mysql中数据库一个层级的对象。

(3)配置entity,可以把它当作与数据库中一个表对应,在query中书写查询sql。
(4)配置field与表中的字段与之对应。如图

3.DIH 命令
通过访问Admin UI管理页面进行数据导入

验证数据导入是否成功,显示出来的字段需要在导入数据前在schema文件中配置field


fq:过滤的字段,df:默认查询字段,start,rows:分页配置,sort:排序,更多关于查询语句的介绍请参考http://lucene.apache.org/solr/guide/7_4/searching.html

六、solrJ(java客户端)

简介:solrJ是java访问solr的客户端工具包,solr也提供了其他语言访问的客户端,可以到官方文档查看,现在solr的索引和数据导入都已经有,但是作为项目中应用的一个组件,少不了java与solr的沟通。
1、maven导入solrJ依赖

<dependency><groupId>org.apache.solr</groupId><artifactId>solr-solrj</artifactId><version>7.4.0</version>
</dependency>

2、从solr中查询索引
工具类

/*** @Description: solr搜索工具类* @author 中宝* @date 2018/10/26 下午16:17*/
public class SolrUtil {private static Logger logs = Logger.getLogger("SolrUtil");// 服务器连接private static SolrClient server;// 配置文件中获取索引服务器的地址private static String serverUrl = "";static {Properties properties = new Properties();try {InputStream fis = SolrUtil.class.getResourceAsStream("/application.properties");properties.load(fis);String solr_url = properties.getProperty("SOLR_URL");String solr_core = properties.getProperty("SOLR_CORE");serverUrl = solr_url + "/" + solr_core;} catch (Exception e) {e.printStackTrace();}}/*** @Description: 初始化solr连接      */public static SolrClient getSolrClient() {if (server == null) {logs.info("初始化solr连接,solr服务器连接地址为:" + serverUrl);server = new HttpSolrClient.Builder(serverUrl).build();}return server;}}

查询

public static void solrQuery() throws Exception {//构建solrj客户端SolrClient client = SolrUtil.getSolrClient();//封装查询条件SolrQuery sq = new SolrQuery("*:*");//查询字段//sq.setFields("name","username");//执行查询并返回response对象QueryResponse response = client.query(sq);SolrDocumentList list = response.getResults();//遍历for (SolrDocument solrDocument : list) {String name = (String) solrDocument.getFirstValue("name");System.out.println(name);}
}

添加或者修改索引

public static void solrAdd() throws Exception {//构建solrj客户端SolrClient client = SolrUtil.getSolrClient();User user = new User();user.setId(4L);user.setName("张飞");user.setUsername("zhangfei");user.setEmail("jzb@126.com");client.addBean(user);client.commit();
}

根据id删除solr索引

public static void solrDelete(String id) throws Exception {//构建solrj客户端SolrClient client = SolrUtil.getSolrClient();client.deleteById(id);client.commit();定时实时重建索引和增量更新}

七、配置定时实时重建索引和增量更新

我们在更新修改后数据库数据变化了怎么实时更新solr索引呢?接下来就进行简单的配置实现。
1、下载solr-dataimport-scheduler.jar
2、在如下目录文件夹和文件D:\jingzhongbao\solr\solr-7.4.0\server\solr
新建文件夹conf

新建文件dataimport.properties

内容如下

#################################################
#                                               #
#       dataimport scheduler properties         #
#                                               #
##################################################  to sync or not to sync
#  1 - active; anything else - inactive
# 这里的配置不用修改
syncEnabled=1#  which cores to schedule
#  in a multi-core environment you can decide which cores you want syncronized
#  leave empty or comment it out if using single-core deployment
#  修改成你所使用的core,我这里是我自定义的core:ik
syncCores=ik#  solr server name or IP address
#  [defaults to localhost if empty]
这个一般都是localhost不会变
server=localhost#  solr server port
#  [defaults to 80 if empty]
#  安装solr的tomcat端口,如果你使用的是默认的端口,就不用改了,否则改成自己的端口就好了
port=8983#  application name/context
#  [defaults to current ServletContextListener's context (app) name]
#  这里默认不改
webapp=solr#  URL params [mandatory]
#  remainder of URL
#  这里改成下面的形式,solr同步数据时请求的链接command后面即为需要更新的
params=/dataimport?command=full-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=/select?qt=/dataimport&command=full-import&clean=true&commit=true#  重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
#  两种格式:2012-04-11 03:10:00 或者  03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00

3、将下载的jar放到solr所在目录下的webapp–>WEB-INF—>lib下
D:\jingzhongbao\solr\solr-7.4.0\server\solr-webapp\webapp\WEB-INF\lib

然后重启,over。
本文所需资料可移步csdn我的资源中进行下载:
https://download.csdn.net/download/jingzhongbao/10794125

ps:不积跬步无以至千里,不积小流无以成江海.每天进步一点点。

solr7.4.0入门,分词,实时增量同步相关推荐

  1. elasticsearch date_MySQL数据实时增量同步到Elasticsearch

    Mysql到Elasticsearch的数据同步,一般用ETL来实现,但性能并不理想,目前大部分的ETL是定时查询Mysql数据库有没有新增数据或者修改数据,如果数据量小影响不大,但如果几百万上千万的 ...

  2. kettle spoon判断增量更新_使用Kettle实现数据实时增量同步--时间戳增量回滚同步...

    使用Kettle实现数据实时增量同步 0. 前言 本文介绍了使用Kettle对一张业务表数据(500万条数据以上)进行实时(10秒)同步,采用了时间戳增量回滚同步的方法.关于ETL和Kettle的入门 ...

  3. kettle 插入更新 数据增量_使用Kettle实现数据实时增量同步

    2018-09-28: 示例job已上传至github,地址见文末 0. 前言 本文介绍了使用Kettle对一张业务表数据(500万条数据以上)进行实时(10秒)同步,采用了时间戳增量回滚同步的方法. ...

  4. mysql增量同步kafka_MySQL数据实时增量同步到Kafka - Flume

    写在前面的话 需求,将MySQL里的数据实时增量同步到Kafka.接到活儿的时候,第一个想法就是通过读取MySQL的binlog日志,将数据写到Kafka.不过对比了一些工具,例如:Canel,Dat ...

  5. flink实时同步mysql_基于Canal与Flink实现数据实时增量同步(一)

    点击上方蓝色字体,关注我 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 准备 配置 ...

  6. 简单实现MySQL数据实时增量同步到Kafka————Maxwell

    任务需求:将MySQL里的数据实时增量同步到Kafka 1.准备工作 1.1.MySQL方面:开启BinLog 1.1.1.修改my.cnf文件 vi /etc/my.cnf [mysqld] ser ...

  7. 实时数仓实践(一)之数据库实时增量同步工具-CDC(Change Data Capture)

    数据库实时增量同步工具-CDC(Change Data Capture) Canal 阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机 房的需求 ...

  8. 结合inotify与rsync实现openstack镜像的实时增量同步

    目标 在各种高可用环境下,都会涉及到数据的共享和同步,要么通过集群本身同步数据,如MariaDB Galera Cluster,要么就构建共享存储,如分布式CEPH存储,或者NFS/NAS存储.当以上 ...

  9. mysql同步mongodb_MySQL数据实时增量同步到MongoDB

    一.go-mysql-transfer go-mysql-transfer是使用Go语言实现的MySQL数据库实时增量同步工具.能够实时监听MySQL二进制日志(binlog)的变动,将变更内容形成指 ...

  10. 数据实时增量同步之CDC工具—Canal、mysql_stream、go-mysql-transfer、Maxwell

    数据实时增量同步之CDC工具-Canal.mysql_stream.go-mysql-transfer.Maxwell 什么是CDC? CDC工具对比 实现原理: Mysql binlog 讲解: m ...

最新文章

  1. java 字符串常用函数_Java学习(5)——字符串常用函数
  2. 品牌才是硬道理——一线、二线主板品牌集中营品牌才是硬道理——一线、二线主板品牌集中营...
  3. 常考数据结构与算法:设计getMin功能的栈
  4. 在生产环境中,阿里云如何构建高性能云原生容器网络?(含 PPT 下载)
  5. gdb调试时查看内存
  6. 推荐一个免费的屏幕取色器,鼠标放到的位置自动显示RGB
  7. golang 包含 数组_Golang数组类型
  8. 90 条 Python 程序建议
  9. POJ--1300--Door Man【推断无向图欧拉通路】
  10. android 2D游戏开发,引擎设计(三) 实验脚本编写与纸娃娃系统
  11. 动态规划经典例题详解
  12. C++ 类中的static成员的使用及单例设计示例
  13. C++复习炒剩饭(1)心一意
  14. 使用计算机时注意的,使用计算机时注意几点预防“鼠标手”
  15. 二、【玩转 华为Atlas200 DK】之连接电脑和Atlas 200
  16. Word处理控件Aspose.Words功能演示:在C#中的Word文档中添加或删除水印
  17. ubuntu etc 设置权限777带来的问题
  18. 安卓下的c语言ide,C语言编译器IDE安卓版下载-C语言编译器IDE下载v1.7 最新版-腾牛安卓网...
  19. 【全源码及文档】基于JSP实现的影视创作论坛系统
  20. Python兼职有哪些?兼职月入5000+

热门文章

  1. 能预防及治疗癌症?哈佛研发出可侦测基因缺陷的人工智能系统
  2. MFC中通过SendMessage修改Edit控件的文本
  3. 被夸大的伊朗“Twitter革命”
  4. 百度一面+二面+三面
  5. 不可多得的MBA相关书籍推荐
  6. SDN和NFV并没有迅速落地的原因是什么?
  7. 第21节--非线性回归(下)
  8. c++中多个线程使用同一个函数
  9. Introduction to CMake by Example
  10. 微信分享本地视频到朋友圈,收藏或者对话