Solr 安装及使用 (一)

solr 简介

Solr是什么

Solr是Apache旗下基于Lucene开发的全文检索的服务。用户可以通过http请求,向Solr服务器提交一定格式的数据(XMLJSON),完成索引库的索引。也可以通过Http请求查询索引库获取返回结果(XMLJSON)。

Solr和Lucene的区别

查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。
Solr的目标是打造一款企业级的搜索引擎系统,它是一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。

solr 的发展历程

2004年,CNET NetWorks公司的Yonik Seeley工程师为公司网站开发搜索功能时完成了Solr的雏形。起初Solr只是CNET公司的内部项目。
2006年1月,CNET公司决定将Solr源码捐赠给Apache软件基金会。
2008年9月,Solr1.3发布了新功能,其他包括分布式搜索和性能增强等功能。
2009年11月,Solr1.4版本发布,此版本对索引,搜索,Facet等方面进行优化,提高了对PDF,HTML等富文本文件处理能力,还推出了许多额外的插件;
2010年3月,Lucene和Solr项目合并,自此,Solr称为了Lucene的子项目,产品现在由双方的参与者共同开发。
2011年,Solr改变了版本编号方案,以便与Lucene匹配。为了使Solr和Lucene有相同的版本号,Solr1.4下一版的版本变为3.1。
2012年10月,Solr4.0版本发布,新功能Solr Cloud也随之发布。

solr 的功能

灵活的查询语法;
支持各种格式文件(Word,PDF)导入索引库;
支持数据库数据导入索引库;
分页查询和排序
Facet维度查询;
自动完成功能;
拼写检查;
搜索关键字高亮显示;
Geo地理位置查询;
Group 分组查询;
solr Cloud (即 solr 集群模式);

solr 基础知识

solr core

#引子
solr部署启动成功之后,需要创建core才可以使用的,才可以使用solr;类似于我们安装完毕MySQL以后,需要创建数据库一样

#概念
在Solr中、每一个Core、代表一个索引库、里面包含索引数据及其配置信息。
Solr中可以拥有多个Core、也就是可以同时管理多个索引库、就像mysql中可以有多个数据库一样。所以SolrCore可以理解成MySQL中的数据库;

#solr目录结构
conf:存储SolrCore相关的配置文件;
data:SolrCore的索引数据;
core.properties: SolrCore的名称,name=SolrCore名称;
所以搭建一个SolrCore只需要创建2个目录和一个properties文件即可;

solr 的安装及配置

安装使用

https://solr.apache.org/guide/8_11/solr-tutorial.html

环境准备

前置条件: 
>> JDK8及以上

下载对应的安装包

https://solr.apache.org/downloads.html

上传到 linux 服务器并解压

~$ unzip -q solr-8.11.0.zip

~$ cd solr-8.11.0/

启动 solr

>> 如果是非root用户, 直接执行
./bin/solr start

>> 如果是 root 用户, 则执行命令:
./bin/solr start -force

通过 solr 管理台访问界面

http://127.0.0.1:8983/solr/#/

solr-admin 的使用

1.DashBoard:solr的版本信息、jvm的相关信息还有一些内存信息。
2.Logging:日志信息,也有日志级别,刚进入查看的时候肯定是有几个警告(warn)信息的,因为复制solr的时候路径发生了变化导致找不到文件,但是并不影响。
3.Core Admin:SolrCore的管理页面。可以使用该管理界面完成SolrCore的卸载。也可以完成SolrCore的添加能添加的前提,SolrCore在solr_home中目录结构是完整的。
4.Java Properties:顾名思义,java的相关配置,比如类路径,文件编码等。
5.Thread Dump:solr服务器当前活跃的一些线程的相关信息。

以上的5个了解一下就行。
通过core admin 创建了一个 core 之后, 左侧菜单栏就会出现一个core selector的选择框, 当选择某一个solrCore以后,又会出现一些菜单,这些菜单就是对选择的SolrCore进行操作的,这些菜单的解读如下文.

Documents

作用:向SolrCore中添加数据,删除数据,更新数据(索引)。
document是lucene进行索引创建以及搜索的基本单元,我们要把数据添加到Lucene的索引库中,数据结构就是document,
如果我从Lucene的索引库中进行数据的搜索,搜索出来的结果的数据结构也document;

文档的结构:
一个文档是由多个域(Field)组成,每个域包含了域名和域值;如果数据库进行类比,文档相单于数据库中的一行记录,域(Field)则为一条记录的字段。

Analyse

作用:测试域/域类型分词效果;
当我们向Solr中添加一个文档,底层首先要对文档域中的数据进行分词。建立词和文档关系。

思考的问题?
id为什么不分词,name域为什么可以分词?name域可以对中文进行分词吗?
添加文档的时候,域名可以随便写吗?

Solr的配置-Field

在Solr中我们需要学习其中4个配置文件:
SolrHome中solr.xml
SolrCore/conf中solrconfig.xml
SolrCore/confSolrCore中managed-schema
SolrCore/conf/data-config.xml
其中我们最常用的一个配置文件,managed-schema。
在Solr中进行索引时,文档中的域需要提前在managed-schema文件中定义,在这个文件中,solr已经提前定义了一些域,比如我们之前使用的id,price,title域。通过管理界面查看已经定义的域;

基本属性

#field标签:定义一个域;
#name属性:域名
#indexed:是否索引,是否可以根据该域进行搜索;一般哪些域不需要搜索,图片路径。
#stored:是否存储,将来查询的文档中是否包含该域的数据;商品的描述。

举例:将图书的信息存储到Solr中; Description域。indexed设置为true,store设置成false
可以根据商品描述域进行查询,但是查询出来的文档中是不包含description域的数据;

#multiValued:是否多值,该域是否可以存储一个数组;图片列表;
#required:是否必须创建文档的时候,该域是否必须
#type:域类型,决定该域使用的分词器。分词器可以决定该域的分词效果(分词,不分词
是否支持中文分词)。域的类型在使用之前必须提前定义;在solr中已经提供了很多的域类型(fieldType)

Solr的配置-FieldType介绍

每个域都需要指定域类型,而且域类型必须提前定义。域类型决定该域使用的索引和搜索的分词器,影响分词效果。
Solr中已经提供好了一些域类型;
text_general:支持英文分词,不支持中文分词;
string:不分词;适合于id,订单号等。
pfloat:适合小数类型的域,特殊分词,支持大小比较;
pdate:适合日期类型的域,特殊分词,支持大小比较;
pint:适合整数类型的域,特殊分词,支持大小比较;
plong:适合长整数类型的域,特殊分词,支持大小比较;

可以参考text_general是如何定义FiledType来自定义FieldType的.

相关属性

name:域类型名称,定义域类型的必须指定,并且要唯一;将来定义域的时候需要指定通过域名称来指定域类型;
class:域类型对应的java类,必须指定,如果该类是solr中的内置类,使用solr.类名指定即可。如果该类是第三方的类,需要指定全类名。
如果class是TextField,我们还需要使用<analyzer>子标签来配置分析器;
positionIncrementGap:用于多值字段,定义多值间的间隔,来阻止假的短语匹配(了解
autoGeneratePhraseQueries:用于文本字段,如果设为true,solr会自动对该字段的查询生成短语查询,即使搜索文本没带""
enableGraphQueries:是否支持图表查询
docValuesFormat: docValues字段的存储格式化器: schema-aware codec,配置在solrconfig.xml中的
postingsFormat:词条格式器: schema-aware codec,配置在solrconfig.xml中的

Solr自带的FieldType类

solr除了提供了TextField类,我们也可以查看它提供的其他的FiledType类,我们可以通过官网查看其他的FieldType类的作用

分析器

分析器就是将用户输入的一串文本分割成一个个token,一个个token组成了tokenStream,然后遍历
tokenStream对其进行过滤操作,比如去除停用词,特殊字符,标点符号和统一转化成小写的形式等。
分词的准确的准确性会直接影响搜索的结果,从某种程度上来讲,分词的算法不同,都会影响返回的结果
因此分析器是搜索的基础;

一个分析器只能有一个分词器, 但可以包含多个过滤器.

分析器的工作流程:
>> 分词
>> 过滤
posted @ 2022-01-05 11:44  psy_code  阅读(249)  评论(0编辑  收藏  举报