一、Solr概述
1.1 概述
Solr 是一个基于 Apache Lucene 之上的搜索服务器,它是一个开源的、基于 Java 的信息检索库。它旨在驱动功能强大的文档检索应用程序 - 无论您需要根据用户的查询将数据服务到何处,Solr 都可以为您服务。Solr与应用程序的集成以为您服务。 下面是一个如何将 Solr 集成到应用程序中的示例
在上述情况下,Solr 与其他服务器应用程序并行运行。例如,在线商店应用程序将提供用户界面、购物车以及为最终用户购买的方式;而库存管理应用程序将允许商店员工编辑产品信息。产品元数据将保存在某种数据库以及 Solr 中。 Solr的官网: http://lucene.apache.org/solr/
1.2 特点
Solr是一个高性能,采用Java开发,
基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
在Lucene 主要有个算法被为
倒排索引:使用关键字去搜索文档
正排索引:使用文档的Id 去查询文档,对比文档里面有没有该关键字
倒排索引:就是利用一个Map 集合搞定
Map<String,List
1.3 工作方式
文档通过Http利用XML或者json 加到一个搜索集合中。 查询该集合也是通过http收到一个XML/JSON响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面等
1.4 SolrCloud与Solr,lucene关系
1.4.1 solr与luence的关系
网上有这样的比喻: (1) lucene是数据库的话,solr就是jdbc (2) lucene是jar,solr就是一个引用这些jar来写的搜索客户端。Solr是一个可以直接用的应用,而lucene只是一些编程用的库。
1.4.2 Solr与SolrCloud
SolrCloud是Solr4.0版本开发出的具有开创意义的基于Solr和Zookeeper的分布式搜索方案,或者可以说,SolrCloud是Solr的一种部署方式。Solr可以以多种方式部署,例如单机方式,多机Master-Slaver方式,这些方式部署的Solr不具有SolrCloud的特色功能。
二、Solr的安装
2.1 安装前的概述
1.1,solr是基于lucene而lucene是java写的,所以solr需要jdk----当前安装的solr-7.5需要jdk-1.8及以上版本,下载安装jdk并设置JAVA_HOME即可。 1.2,下载solr,然后解压即可,windows和linux都可以下.tgz(.tgz本质是.tar.gz)和.zip解压出来都一样的。 1.3,在solr5以前solr的启动都有tomcat作为容器,但是从solr5以后solr内部集成jetty服务器,可以通过bin目录中脚本直接启动。就是从solr5以后跟solr4最大的区别是被发布成一个独立的应用。 1.4,在solr5之后solr其实特别容易安装,有安装包,之后在解压,直接启动bin下solr,solr就这样完成的启动了。。
2.2 准备工作
1,安装Docker 2,安装vim 3,安装jdk 搜索 yum -y install java-1.8.0-openjdk 3.安装solr
1.下载solr
https://lucene.apache.org/solr/
2. wget https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/7.7.2/solr-7.7.2.tgz
2.3 安装
2)解压solr并移动到/usr/local
3)启动solr
进入solr目录
(1)bin:是脚本的启动目录
(2)contrib:Solr 的contrib目录包含 Solr 专用功能的附加插件目录
(3)dev-tools:跟开发工具相关的包
(4)dist:编译打包后存放目录,即构建后的输出产物存放的目录
(5)docs:solr文档的存放目录
(6)example:示范例子的存放目录,这里展示了DIH,即数据导入处理的例子
(7)server: 此目录是 Solr 应用程序的核心所在。此目录中的 README 提供了详细的概述,但以下是一些特点:
Solr 的 Admin UI(server/solr-webapp)
Jetty 库(server/lib)
日志文件(server/logs)和日志配置(server/resources)。有关如何自定义 Solr 的默认日志记录的详细信息,请参阅配置日志记录一节。
示例配置(server/solr/configsets)
进入bin目录
bin目录分析
1.1、solr和solr.cmd:
分别是用于* nix系统和Windows系统,根据所选参数不同而控制solr的启动和停止。
1.2、solr.in.sh和solr.in.cmd:
这些是分别用于* unix和Windows系统的属性文件。
1.3、install_solr_services.sh:
此脚本用于* unix系统将Solr作为服务安装
开机自启自动
出现以上问题可以修改启动代码
./solr start -force
启动成功
2.4 测试访问
http://ip:8983/solr/
2.5 启动失败
2.5.1 VM 因为你的虚拟机的防火墙没有关闭
查看防火墙状态 firewall-cmd --state 1 停止firewall systemctl stop firewalld.service 1 禁止firewall开机启动 systemctl disable firewalld.service
2.5.2 阿里云 对外端口8983 添加安全组
登录官网控制台ECS 添加安全组入方向规则
三、Solr的名词解释及配置文件说明
3.1 索引库
我们导入数据,solr 会被它以某种格式保存在索引库里面! 刚安装的现在没有任何索引库
3.2 索引分词
Solr在导入数据库时,会对某些语句进行分词
3.3 搜索分词
Solr在搜索数据库时,会对某些语句进行分词
3.4 文档
Solr 里面搜索出来的每个数据,都是以xml 文件或json 来表示,这些数据被称为文档 Json->文档 Xml->文件
3.5 字段
文档里面可能有很多的字段,就类似于数据库的字段
3.6 和Mysql的数据库做对比
3.7 配置文件说明
在 Solr 中有几个配置文件,您将在执行过程中与之交互。 这些文件中的很多都是 XML 格式的,尽管与配置设置交互的 API 在需要时往往接受 JSON 以进行编程访问。
3.7.1 Solr Home
在运行 Solr 时,您需要访问主目录。 当您第一次安装 Solr 时,您的主目录是:server/solr。
Solr 主目录包含重要的配置信息,并且是 Solr 将存储其索引的地方。 以下示例显示了 Solr 主目录中的关键部分:
<solr-home-directory>/
solr.xml
core_name1/
core.properties
conf/
solrconfig.xml
managed-schema
data/
core_name2/
core.properties
conf/
solrconfig.xml
managed-schema
data/
3.7.2 Solr 配置文件
在 Solr 的目录中,你会发现这些文件: solr.xml:为您的 Solr 服务器实例指定配置选项。 每个 Solr core: core.properties:为每个核心定义特定的属性,例如其名称、核心所属的集合、模式的位置以及其他参数。 solrconfig.xml:控制高级行为。例如,您可以为数据目录指定一个备用位置。 managed-schema(或用 schema.xml 替代)描述您将要求 Solr 索引的文档。模式将文档定义为字段集合。您可以同时定义字段类型和字段本身。字段类型定义功能强大,包含有关 Solr 如何处理传入字段值和查询值的信息。 data/:包含索引文件的目录。
四、Solr索引库说明及创建
4.1 solr管理页面去创建【不推荐!!!】
1.使用solr管理页面去创建【不推荐!!!】
2.打开solr的管理页面
3.点击add Core
name:自定义名字 建议和instanceDir目录保持一样
instanceDir:实例名称 一般和name一样
dataDir:默认的默认数据存储目录 一般data
config 指写配置文件 db1-core/conf/solrconfig.xml
schema:指定属性的xml 默认为db1-conre/conf/managed-schema文件
4.但是会报错!!!!!!!!!!!!!!!!
查看usr/local/server/solr/
5.解决问题:
进入db1-core这个目录发现里面啥都没有
执行下面的命令解决默认配置问题不存在的问题
cp -r ../configsets/sample_techproducts_configs/* ./
回到solr管理台 add core
4.2 命令创建【推荐】
1.进入solr的/bin目录 2.执行创建命令
./solr create_core -c db2-core -force
3.查看server/solr/ 4.页面查看
五、Solr控制台说明-主面板
5.1,Dashboard(仪表盘)
访问 http://www.leige.plus:8983/solr时,出现该主页面,可查看到solr运行时间、solr版本,系统内存、虚拟机内存的使用情况 这里的图片描述
5.2.Logging(日志)
显示solr运行出现的异常或错误
5.3.Core Admin (core管理)
主要有Add Core(添加核心), Unload(卸载核心),Rename(重命名核心),Reload(重新加载核心),Optimize(优化索引库) Add Core是添加core:主要是在instanceDir对应的文件夹里生成一个core.properties文件
name:给core起的名字; instanceDir:与我们在配置solr到tomcat里时的solr_home里新建的core文件夹名一致; dataDir:确认Add Core时,会在new_core目录下生成名为data的文件夹 config:new_core下的conf下的config配置文件(solrconfig.xml) schema: new_core下的conf下的schema文件(schema.xml)
确认Add Core时,会在new_core下生成data文件夹,与core.properties文件。core.properties文件里内容如下: 前面已说过
5.4.Java Properties
可查看到Java相关的一些属性的信息
六、Schema【---solr/db2-core/conf/】
6.1 添加一个field
添加完成之后查managed-schma多一个属性
相当于给数据库里面的某一个表添加了一个叫goods_name和字段
6.2 添加一个动态的field
添加完成之后查managed-schma多一个属性
6.3 添加一个动态的copyfield
添加一个goods_keywords
七、Document和Query
因为上面添加了goods_name 和goods_remark的属性现地相当于有一个solr的数据库里面有一个表叫db2-core 这个表里面现在自己加了goods_name和goods_remark的两个字段
7.1 向库里面增加数据
7.2 根据ID删除
全删除
7.3 查询数据
Request-Handler(qt):
q: 查询字符串(必须的)。:表示查询所有;keyword:吕布 表示按关键字“吕布”查询
fq: filter query 过滤查询。使用Filter Query可以充分利用Filter Query Cache,提高检索性能。作用:在q查询符合结果中同时是fq查询符合的(类似求交集),例如:q=mm&fq=date_time:[20081001 TO 20091031],找关键字mm,并且date_time是20081001到20091031之间的。
sort: 排序。格式如下:字段名 排序方式;如advertiserId desc 表示按id字段降序排列查询结果。
start,rows:表示查回结果从第几条数据开始显示,共显示多少条。
fl: field list。指定查询结果返回哪些字段。多个时以空格“ ”或逗号“,”分隔。不指定时,默认全返回。
df: default field默认的查询字段,一般默认指定。
Raw Query Parameters:
wt: write type。指定查询输出结果格式,我们常用的有json格式与xml格式。在solrconfig.xml中定义了查询输出格式:xml、json、Python、ruby、PHP、phps、custom。
indent: 返回的结果是否缩进,默认关闭,用 indent=true | on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。
hl: high light 高亮。hl=true表示启用高亮
hl.fl : 用空格或逗号隔开的字段列表(指定高亮的字段)。要启用某个字段的highlight功能,就得保证该字段在schema中是stored。如果该参数未被给出,那么就会高 亮默认字段 standard handler会用df参数,dismax字段用qf参数。你可以使用星号去方便的高亮所有字段。如果你使用了通配符,那么要考虑启用 hl.requiredFieldMatch选项。
hl.simple.pre:
hl.requireFieldMatch: 如果置为true,除非该字段的查询结果不为空才会被高亮。它的默认值是false,意味 着它可能匹配某个字段却高亮一个不同的字段。如果hl.fl使用了通配符,那么就要启用该参数。尽管如此,如果你的查询是all字段(可能是使用 copy-field 指令),那么还是把它设为false,这样搜索结果能表明哪个字段的查询文本未被找到
hl.usePhraseHighlighter:如果一个查询中含有短语(引号框起来的)那么会保证一定要完全匹配短语的才会被高亮。
hl.highlightMultiTerm:如果使用通配符和模糊搜索,那么会确保与通配符匹配的term会高亮。默认为false,同时hl.usePhraseHighlighter要为true。
评论