一、入门
window os下的安装和配置
1、下载windows版本的solr.zip文件,解压在一个文件名不包含空格的文件夹下,命令行输入sorl启动命令。这时候计算机正在运行Solr,浏览器访问localhost:8983/solr跳转到Solr的管理界面。
–>在后台solr启动一个为jetty的java web 服务器,端口为8983,Solr是运行在Jetty上的web应用程序。–>每台jetty服务器上都有一个solr的主目录,通过java系统属性solr.home.home进行配置。
再回到solr上,每个solr中又可以有多个core(内核,可以理解为java中的一个实例),每个内核中又有包含本内核配置信息的单独目录。
sole主目录:

1、solrconfig.xml是内核的主要配置文件。
2、schema.xml是对内核进行文本分析和索引的主要配置文件
3、example-DIH一个具备了DIH属性的特殊内核,在example目录下的multiply提供了多内核配置信息。
4、lang:语言信息文件
5、data:关于内核lucence索引文件。
注:本次是使用单节点启动(sorl还支持双节点集群启动)
2、解压文件,控制台输入bin\solr.cmd start -p(指定端口号,默认为8983),即可运行,访问localhost:8983可见尚无core(内核),输入bin\sorl create -c(core)创建一个core实例
启动时bin\sorl.cmd start -e 后可启sorl内置示例如:cloud 、techproducts


看到happy search sorl启动成功

3、建立索引
schema的部署:有直接更改xml文件但是需要重新加载,现在多采用修改schema.api的方式,不会造成配置信息丢失的情况。(windows情况下采用postman运行接口的方式)
在配置过schema.xml以及solrconfig.xml和MyDataConfig.xml文件之后,访问时候出现了无法加载mycore中的solrconfig.xml文件的问题。
估计是当初建立新核心或者修改配置文件信息时候出问题了,把solrconfig文件重新复制一份,并添加一个requestHandler.在运行时候错误从无法加载变为找不到dataimport这个jar包。查阅资料发现这个jar包安装时存放在dist 目录下,拷贝一份存在mycore中的webApp下的web_INF下lib文件中重新启动solr已经可以正常访问并显示数据。
如下:

到此,数据应该是已经正确导入。
访问solr的管理界面点击query验证数据是否真正导入成功,q中的参数时*:*代表查询全部索引,fq:代表指定参数。点击运行查看返回的索引集合,params里面是空的。这时候我在想core中的两个配置文件我都配了几遍应该没有问题,那么manage-schema(schema.xml)文件是不是也要配置呢?

关于manage-schema:内含三个重要元素
1、fieldtype:定义分词器类型。
2、analyzer:分词器,决定着检索使用的算法。
3、field:存储索引的字段。
为了适应企业化生产方式,统一采用 schema API统一管理,如果你想修改架构API提供了一系列命令,最常见的增加删除和替换如下(其他命令请参考官网http://lucene.apache.org/solr/guide/7_4/schema-api.html#modify-the-schema):
add-field:添加包含您提供的参数的新字段。
在add中你可以设定一个"name"(存储字段)和"type"(字段类型)。
delete-field:删除一个字段。
replace-field:使用配置不同的字段替换现有字段。
虽然postman 中使用接口对schema已经成功配置,但是在对solr服务器发送请求时候,对基础数据查询时,params结果仍然为0(尝试修改数据类型?究竟数据库中数据类型对应的是MyDataConfig.xml中的数据类型还是postman中传入的数据类型。)

分词器:
先去下载ik中文分词器,解压后将其中的jar包文件和配置文件分别放在web-app中的lib文件和classes文件中。
重启solr点击核心下的analyzer之后输入数据 选择分词器、点击执行如下为分词器效果图:
对manage-schema文件的配置,参考了前辈的说法,一共有三种配置方式1、官方推荐使用postman对manage-api访问从而达到无需重启的配置目的、2、直接修改manage-schema配置文件,需要重启。3、从solr的管理界面直接添加。无需重新启动?注意不能重复添加索引,否则报错(add、delete、replace语句前文有做说明)。
添加数据时,使用solr管理界面dataimport选择full-import、clean、commit记住千万点击执行然后点击刷新数据即可显示已经导入数据。如图所示:


导入数据总结:
1、建立基础数据。
2、在mycore中的mydataconfig.xml文件中配置相关字段信息
3、为manage-schema文件配置索引字段信息(包括name type stored indexed四个重要属性),有三种配置方式:直接配置,postman访问接口、solr管理界面添加。
4、配置solrconfig.xml文件,用来加载dataimport requestHandler驱动和mysql的驱动,从而达到导入你在数据库中存的那些基础数据。
wanchne完成这四步,建议重启solr,规避上述三个配置文件丢失的问题。
最后两部都是可以在solr的管理界面实现,参照截图。

4.solr跨表(同一个数据库中无关联的两张表)建立索引
(有很多种方式)
修改mycore中的mydataconfig.xml文件,加入一个实体user1.重启solr,在管理界面重新导入数据查询结果如下(前提是正确添加索引):

4 5两条数据是user1表中数据搜索得到,为了防止索引覆盖,这里手动添加了user1的主键。
显然,当主键采用自增方式自动生成必然会存在因为主键一直带来的索引覆盖问题——后增加的索引覆盖先增加的索引。如下:

解决方式:
1、主键使用uuid方式生成。
2、手动修改schema.xml在fieldtype标签中添加索引字段,字段名重复的无需添加。
关联查询,修改mydataconfig.xml文件,在entity里面嵌入一条entity query后面写具体的业务逻辑对应的sql语句如:

query=“select id,courseName from tj_course where isDelete=0 and
courseAuditState=1 and studentId=’${tj_student.id}’”

mydataconfig文件:

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/manage" user="root" password="1234"/>
<document>
<entity name="user" pk="id" query="select * from user">
<field column="id" name="id"/>
<field column="name" name="name"/>
<field column="age" name="age"/>
<field column="address" name="address"/>
<field column="description" name="description"/>
</entity>
<entity name="user1" pk="id" query="select * from user1">
<field column="id" name="id"/>
<field column="hobby" name="hobby"/>
</entity>
</document>
</dataConfig>

5、跨数据库(子库)建立索引:
其他和跨表类似,修改mydatacofig.xml文件中的数据源字符串即可:

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="source1" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/manage" user="root" password="1234"/>
<dataSource name="source2" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/boot_crm" user="root" password="1234"/>
<document>
<entity name="user" dataSource="source1" pk="id" query="select * from user">
<field column="id" name="id"/>
<field column="name" name="name"/>
<field column="age" name="age"/>
<field column="address" name="address"/>
<field column="description" name="description"/>
</entity>
<entity name="span" dataSource="source2"  pk="id" query="select * from span">
<field column="id" name="id"/>
<field column="hobby" name="hobby"/>
</entity>
</document>
</dataConfig>

重启solr,导入数据,搜索如下:

前三条是数据库manage中的user表,最后一条来自boot_crm中的user1表。

Linux操作系统下的安装和配置:
solr官网上下载并安装solr的tgz压缩包,使用xshell连接服务器,启动xtcp将文件传到linux上的solr8.0目录下面,进入终端进入主目录,输入:tar zxf <你要解压的文件的文件名> 解压成功。
启动/重启:
bin/solr start(restart) -p 端口号。
新建一个core:create -c mycore(core名称)
cd solr8.0/server/solr/mycore/conf
进入配置文件根目录
配置requestHandler:
vi solrconfig.xml 在同级标签下添加一个requestHandler,然后将solr的根目录下的dist包中的dataimport.jar拷贝到webapp中的webinf下面的lib文件,如果你需要用到mysql做数据源拷贝一份mysql的jar包。
配置mydataconfig.xml:
vi MyDataConfig.xml 记得编辑之前修改文件权限,否则无法修改。数据源配置和window中的一样。
保存后重启solr.
进入solr管理界面新建索引,addField 输入索引名称(你可以覆盖但是,不能重复),做到这点击query发现数据还未导入。
检查数据库的用户权限,因为用root用户可能因为安全问题无法重启solr服务器,只能使用普通用户身份重启,所以在数据库层面新建一个普通用户、并授予相应的权限。
CREATE USER ‘chan’@‘localhost’ IDENTIFIED BY ‘123456’
grant all on . to ‘chan’@‘localhost’;
重启服务数据依旧显示为空。
检查数据库,发现数据没有对应,修改mydataconfig.xml文件,查询成功。

ik中文分词器:
分词器是为了更好的建立索引,建立索引是为了更好地搜索,所以分词器就是为了搜索而生。而依据何种规则(则是各分词器内部的算法决定的),相对来说,ik中文分词器更适合现在的数据,所以这里使用ik分词器(solr内部也提供了一种分词器技术)。
效果图如下:

如此,就实现了在linux操作系统下的部署,不过并没有实现对mysql数据库的数据同步。

增量导入:
补充:和全部导入相对应,当有数据更新时,采用增量导入:dataimport 选择导入即可,无需清除之前的数据。
模糊查询:
目前还不支持模糊查询,因为jar包还没有部署完善。

注册服务:
./install_solr_service.sh solr-8.0.0.tgz
create user
注册服务以后:
sudo service solr start

数据同步问题:
当每次修改数据时,我们不需要重新淡入数据,通过一个定时器,对数据实现自动导入。也就是按照一定时间戳方式,一段时间自动调用 full-import或者delta-import。

部署到tomcat上:
1、将solr中的solr webapp拷贝到tomcat中的webapp中,并且改名为solr
2、solr8.0中新建一个solr-home的文件,并且将server中的solr内的文件拷贝进来,
3拷贝jar包:进入/server/lib/ext拷贝所有jar包到webapps/solr/WEB-INF/lib内。进入/server/lib拷贝m开头的jar包。进入dist目录下拷贝dataimport和extra两个包,进入tomcat中的solr内的web.xml文件添加solr-home的配置文件env。并且注释掉security文件,为solr-home新建一个solr-core文件盛放配置信息,将solr-home 中的solr文件内涵的conf配置文件复制到solr-core内。
重启tomcat,访问测试。–我没重启,担心服务器里面其他在运行其他项目。

增量自动导入:
当涉及到大数据的增量导入时候,因为重建索引势必会影响系统的性能。采用同步增量更新索引,提高了系统的性能,只需要通过程序定时访问url的方式,即可实现增量同步。
访问:
http://192.168.1.106/solr/dataimport?command=deltaimport&clean=false&commit=true&wt=json&indent=true&verbose=false&optimize=false&debug=false

对应的参数的物理意义:
参数 物理意义
command full-import(全量)/delta-import(增量)
clean 是否清空数据
commit 是否提交
wt 返回数据格式
indent 返回的结果是否缩进
verbose 表示你想要得到一些关于中间步骤的信息
optimize optimize操作可以优化查询性能,但是消耗资源多
debug debug模式

或者在数据库层面做个定时处理监听器。

下图name为佟丽娅的索引是通过同步增量实现的而不是full-import实现:

要实现增量同步,数据库中必须要添加一个字段,存储数据存储时的mysql系统时间,当其大于等于solr服务器时间才能被检测到。(二者的时间一致)
query:因为是增量同步,所以先查询出满足id>dataimporter.request.id的数据。deltaQuery:从query中的数据中查询所有updateid大于上次同步{dataimporter.request.id}的数据。 deltaQuery:从query中的数据中查询所有update_id大于上次同步dataimporter.request.id的数据。deltaQuery:从query中的数据中查询所有updatei​d大于上次同步{dataimporter.last_index_time}时间的id(需要增量同步的数据),该id=${dih.delta.id}
这些语句倒过来看会容易理解,先根据时间找出要同步增量的数据的id保存下来然后建立索引。

定时增量同步,全量导入就是清除所有索引然后重建,没有必要。

到这里solr在linux配置结束。
solr索引和基本的数据操作:
将内容添加到 Solr 索引中,并在必要时修改该内容或将其删除。

以下是将数据加载到 Solr 索引中的三种最常见的方法:

使用基于 Apache Tika 构建的 Solr Cell 框架来获取二进制文件或结构化文件,如 Office、Word、PDF 和其他专有格式。
通过向任何可以生成此类请求的环境发送 HTTP 请求到 Solr 服务器来上传 XML 文件。
编写自定义 Java 应用程序以通过 Solr 的 Java Client API(在客户端 API 中更详细地描述)来获取数据。如果您正在使用提供 Java API 的应用程序(如内容管理系统(CMS)),则使用 Java API 可能是最佳选择。
如果在与索引关联的架构中定义了字段名称,那么当该内容被标记时,与该字段相关联的分析步骤将被应用于其内容。如果存在与字段名称匹配的字段,则在架构中未明确定义的字段将被忽略或映射到动态字段定义。

solr支持对非结构化数据建立索引:
使用bin/post对各种富文本集录入数据:
bin/post -c files ~.pdf
然后访问http://192.168.1.106:8983/solr/files/browse则会显示所有的文本信息:

然后你可以访问http://192.168.1.106:8983/solr/files/select?q=pdf
从而对pdf格式的文本进行内容信息进行查看:

要以XML或其他格式查看文档(默认html格式显示),请将&wt添加到该URL的末尾。如:

http://localhost:8983/solr/files/browse?&wt=xml

solrJ的知识:
https://lucidworks.com/2012/02/14/indexing-with-solrj/

搜索引擎sorl的搭建相关推荐

  1. 搜索引擎Solr环境搭建详解

    Solr服务器采用java5开发的,是基于Lucene全文搜索的. 要想搭建Solr,首先进行java环境的配置,安装对应的jdk以及tomcat,在此就不多讲. 以下是在jdk1.7和tomcat1 ...

  2. 自己做mysql搜索引擎_如何搭建自己的搜索引擎?

    总体分为三个步骤:第一步准备环境,主要会用到云搜索服务.弹性云服务器和虚拟私有云.云搜索服务(Cloud Search Service)是一个基于Elasticsearch且完全托管的在线分布式搜索服 ...

  3. 搜索引擎Solr_环境搭建和基本使用

    作者:田超凡 原创博文,严禁复制转载,仿冒必究 1 Solr安装 1.1 上传solr安装包到服务器 1.2 解压缩,安装Solr基础依赖环境 目录结构说明 bin :solr命令 Contrib:文 ...

  4. Sorl环境搭建与mysql表导入数据

    windows安装solr 一.solr windows安装流程 官网下载地址:https://solr.apache.org/downloads.html 我下载的是8.11.2版本,注意如果需要下 ...

  5. Sorl使用——什么是solr

    Redis使用--Redis支持的五种数据类型 背景 日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分 ...

  6. 快速搭建对话机器人,就用这一招!

    作者 | Milvus.io 责编 | 胡巍巍 问答系统是自然语言处理领域一个很经典的问题,它用于回答人们以自然语言形式提出的问题,有着广泛的应用.其经典应用场景包括:智能语音交互.在线客服.知识获取 ...

  7. 客服机器人源码_快速搭建对话机器人,就用这一招!

    问答系统是自然语言处理领域一个很经典的问题,它用于回答人们以自然语言形式提出的问题,有着广泛的应用.其经典应用场景包括:智能语音交互.在线客服.知识获取.情感类聊天等.常见的分类有:生成型.检索型问答 ...

  8. WordPress建站教程 从零开始服务器搭建网站超详细

    说起第一次使用Wordpress建站,相信大部分人的印象都是虚拟主机.空间搭网站,因为便宜.省心,自己搭个小站放上去也算足够,但是随着各种技术的迅速发展,原来的很多虚拟主机已经不能再满足Wordpre ...

  9. Android移动开发之【Android实战项目】记一次app开发过程!

    跟大家分享一下过程,经验(干货). 文章目录 一.开发环境选择: 1.AndoridStudio比Eclipse 2.AndroidStudio和Eclipse不同点总结 二.遇到的问题and经验分享 ...

最新文章

  1. Vi非正常退出导致敏感信息泄露
  2. 详解Printjack打印机攻击
  3. 【Linux网络编程】原始套接字实例:MAC 地址扫描器
  4. 风控中的企业与个人数据有哪些核验维度
  5. 【Iterm2】如何解决iterm2窗口自动隐藏的问题
  6. 拿走不谢:一份历经线上考验的大规模系统的消息队列技术方案!
  7. 了解计算机网络拓扑结构,认识计算机网络拓扑结构
  8. 如何让 Linux 下非 root 用户程序使用小于 1024 端口
  9. 小程序毕设作品之微信二手交易小程序毕业设计成品(6)开题答辩PPT
  10. 将keras的模型封装成可转换为tensorlow的.pb格式,并生成.pbtxt文件
  11. 英文词根词典简化笔记
  12. linux下安装五笔输入法,Linux五笔输入法:小小输入法安装配置
  13. 接口测试(测试用例)
  14. 嵌入式单片机知识点汇总(持续更)
  15. win10中 有道词典不能联网/发音解决方法
  16. Windows Phone 开发人员设置付款和税务信息
  17. css炫酷标题,炫酷 CSS 背景效果的 10 个代码片段
  18. 第8章 面向对象编程(中级部分)
  19. 软件测试面试题-那些让我印象深刻的bug
  20. linux startx无效_LINUX startx命令-用来启动X Window

热门文章

  1. syntax error怎么解决
  2. C语言打印99乘法口诀表
  3. 经典金融工程讲座-郑振龙教授在西南财大的精彩演讲
  4. git保存用户名密码的方式
  5. Confluent Platform: 正式环境安装
  6. 最大熵原理与最大熵模型
  7. UNIX故障--sun m4000服务器故障硬盘更换案例
  8. 浮点数的阶码,尾数与移码
  9. 计算机中阶符,阶码,数符,尾数是什么?
  10. NVM命令行操作命令