SpringData_Solr

【Solr】

主要内容

  1. Solr 简介
  2. Solr 搜索原理
  3. Solr 单机版安装
  4. 可视化管理界面
  5. 新建核心
  6. 分词
  7. Dataimport
  8. 使用 SolrJ 操作 Solr
  9. Spring Data for Apache Solr
  10. SolrCloud

SpringData_Solr_第1张图片

一、 Solr 简介

1 为什么使用 Solr

在海量数据下,对 MySQL 或 Oracle 进行模糊查询或条件查询的效率是很低的。而搜索功能在绝大多数项目中都是必须的,如何提升搜索效率是很多互联网项目必须要考虑的问题。
既然使用关系型数据库进行搜索效率比较低,最直接的解决方案就是使用专用搜索工具进行搜索,从而提升搜索效率。

2 常见搜索解决方案

基于 Apache Lucene(全文检索工具库)实现搜索。但是 Lucene 的使用对于绝大多
数的程序员都是“噩梦级”的。
基于谷歌 API 实现搜索。
基于百度 API 实现搜索。

3 Solr 简介

Solr没有表的概念,它就是一个索引,这个索引就当做是表,希望有多少个字段就在配置文件中写。

Solr 是基于 Apache Lucene 构建的用于搜索和分析的开源解决方案。可提供可扩展索引、搜索功能、高亮显示和文字解析功能。
Solr 本质就是一个 Java web 项目,且内嵌了 Jetty 服务器,所以安装起来非常方便。
客户端操作 Solr 的过程和平时我们所写项目一样,就是请求 Solr 中控制器,处理完数据后把结果响应给客户端。

4 正向索引和反向索引

只要讨论搜索就不得不提的两个概念:正向索引(forward index)和反向索引(inverted index)。
正向索引:从文档内容到词组的过程。每次搜索的时候需要搜索所有文档,每个文档比较搜索条件和词组。

SpringData_Solr_第2张图片

反向索引:是正向索引的逆向。建立词组和文档的映射关系。通过找到词组就能找到文档内容。(和新华字典找字很像)

SpringData_Solr_第3张图片

二、 Solr 搜索原理

1 搜索原理

Solr 能够提升检索效率的主要原因就是分词和索引(反向索引)。
分词:会对搜索条件/存储内容进行分词,分成日常所使用的词语。
索引:存储在 Solr 中内容会按照程序员的要求来是否建立索引。如果要求建立索引会把存储内容中关键字(分词)建立索引。

SpringData_Solr_第4张图片

2 Solr 中数据存储说明

Solr 为了给内容建立索引,所以 Solr 就必须具备数据存储能力。所有需要被搜索的内容都需要存储在 Solr 中,在开发中需要把数据库中数据添加到 Solr 中进行初始化,每次修改数据库中数据还需要同步 Solr 中的数据。
Solr 中数据存储是存储在 Document 对象中,对象中可以包含的属性和属性类型都定义在 schema.xml 中。如果需要自定义属性或自定义属性类型都需要修改 schema.xml 配置文件。从 Solr5 开始 schema.xml 更改名称为 managed-schema(没有扩展名) 配置文件只加不减

三、 Solr 单机版安装

Solr 是使用 Java 编写,所以必选先安装 JDK。

1 上传并解压

上传压缩包 solr-8.2.0.tgz 到upload 中。
解压

SpringData_Solr_第5张图片

tar zxf solr-8.2.0.tgz

SpringData_Solr_第6张图片

2 复制到/usr/local 中

cp -r solr-8.2.0 …/solr

Linux系统中软件不要装到root目录下,权限要求很高

在这里插入图片描述

红色为Linux下启动文件,黄色为Windows下启动文件,蓝色为核心文件

在这里插入图片描述

3 修改启动参数

修改启动参数,否则启动时报警告。提示设置 SOLR_ULIMIT_CHECKS=false取消系统安全检查

cd /usr/local/solr/bin

vim solr.in.sh

SpringData_Solr_第7张图片

4 启动 Solr

Solr 内嵌 Jetty,直接启动即可。默认监听 8983 端口。但是9083端口也被占用了

Solr 默认不推荐 root 账户启动,如果是 root 账户启动需要添加-force 参数。

./solr start -force

SpringData_Solr_第8张图片

SpringData_Solr_第9张图片

关闭命令

在这里插入图片描述

solr的运行状态命令

solr_home是solr运行的主目录

SpringData_Solr_第10张图片

四、 可视化管理界面

在关闭防火墙的前提下,可以在 windows 的浏览器中访问 Solr。
输入: http://192.168.32.133:8983 就可以访问 Solr 的可视化管理界面。
左侧有 5 个菜单。分别是:
(1)Dashboard:面板显示 Solr 的总体信息。
(2)Logging:日志
(3)Core Admin:Solr 的核心。类似于数据的 Database
(4)Java Perperties:所有 Java 相关属性。
(5)Thread Dump:线程相关信息。
(6)如果有 Core,将显示在此处。

五、 新建核心

Solr 安装完成后默认是没有核心的。需要手动配置。
需要在 solr/server/solr 下新建文件夹,并给定配置文件,否则无法建立。

1 新建目录

在/usr/local/solr/server/solr 中新建自定义名称目录。此处示例名称为 testcore。

cd /usr/local/solr/server/solr

SpringData_Solr_第11张图片

mkdir bjsxt 创建核心

SpringData_Solr_第12张图片

2 复制配置文件

在 configsets 里面包含了_default 和 sample_techproducts_configs。里面都是配置文件示例。_default 属于默认配置,较纯净。sample_techproducts_configs 是带有了一些配置示例。

SpringData_Solr_第13张图片

cp -r configsets/_default/conf/ bjsxt/

SpringData_Solr_第14张图片

3 填写 Core 信息

在可视化管理界面中 Core Admin 中编写信息后点击 Add Core 后,短暂延迟后testcore 就会创建成功。schema 处不用更改。

name是核心名字,instanceDir是实例目录就是solr_home下创建的目录,一般情况下两者同名

dataDir名字可以自定义是存数据的目录

solrconfig.xml和schema.xml需要我们提供

schema.xml在文件表现上就是managed-schema

SpringData_Solr_第15张图片

在这里插入图片描述

SpringData_Solr_第16张图片

创建成功,核心选择器

SpringData_Solr_第17张图片

索引库和反向索引都在index目录里

在这里插入图片描述

4 出现 testcore

在客户端管理界面中,选择新建的 Core 后,就可以按照自己项目的需求进行操作了。

六、 分词 Analysis

在 Solr 可视化管理界面中,Core 的管理菜单项中都会有 Analysis。表示根据Scheme.xml(managed-schema)中配置要求进行解析。
对英文解析就比较简单了,只要按照空格把英文语句拆分成英文单词即可。

SpringData_Solr_第18张图片

但是如果条件是中文时,把一句话按照字进行拆分就不是很合理了。正确的方式是按照合理的词组进行拆分。

SpringData_Solr_第19张图片

1 中文分词器安装及配置步骤

上传 ik-analyzer.jar 到 webapps 中。
去 https://search.maven.org/search?q=com.github.magese 下 载 对 应 版 本 的ik-analyzer。可以在"软件/Analyzer"中直接获取。 ik-analyzer.jar 的本部需要和solr的版本一一对应

1.1 上传 jar 到指定目录

上传 ik-analyzer-8.2.0.jar 到
/usr/local/solr/server/solr-webapp/webapp/WEB-INF/lib 目录中

在这里插入图片描述

SpringData_Solr_第20张图片

在这里插入图片描述

1.2 修改配置文件

修改/usr/local/solr/server/solr/testcore/conf/managed-schema

vim /usr/local/solr/server/solr/testcore/conf/managed-schema

添加下面内容。

<field name="myfield" type="text_ik" indexed="true" stored="true" />
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer
class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false"
conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer
class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true"
conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

排版:Esc 退出编辑状态下:gg=G

index 为索引,

SpringData_Solr_第21张图片

1.3 重启

cd /usr/local/solr/bin

./solr stop -all 关闭 -all表示关闭所有

./solr start -force

在这里插入图片描述

1.4 验证
可以在可视化管理界面中找到 myfield 属性进行验证。

SpringData_Solr_第22张图片

SpringData_Solr_第23张图片

中华人民共和国国歌

SpringData_Solr_第24张图片

2 managed-schema 配置说明

2.1

表示定义一个属性类型。在 Solr 中属性类型都是自定义的。在上面配置中
name="text_ik"为自定义类型。当某个属性取值为 text_ik 时 IK Analyzer 才能生效。

2.2

表示向 Document 中添加一个属性。
常用属性:
name: 属性名
type:属性类型。所有类型都是 solr 使用配置的
indexed: 是否建立索引
stored: solr 是否把该属性值响应给搜索用户。
required:该属性是否是必须的。默认 id 是必须的。
multiValued:如果为 true,表示该属性为复合属性,此属性中包含了多个其他的
属性。常用在多个列作为搜索条件时,把这些列定义定义成一个新的复合属性,通过搜索一
个复合属性就可以实现搜索多个列。当设置为 true 时与

结合使用

2.3

唯一主键,Solr 中默认定义 id 属性为唯一主键。ID 的值是不允许重复的。

2.4

名称中允许*进行通配。代表满足特定名称要求的一组属性。

七、 Dataimport

可以使用 Solr 自带的 Dataimport 功能把数据库中数据快速导入到 solr 中.
必须保证 managed-schema 和数据库中表的列对应。

例如从mysql中读取某一张表,把表中的数据读出来之后按照一定的规则插入到solr的部分字段之中

通过EditPlus远程修改Linux下的配置文件

SpringData_Solr_第25张图片

高级设置

在这里插入图片描述

连接

SpringData_Solr_第26张图片

连接成功

SpringData_Solr_第27张图片

1 修改配置文件

修改 solrconfig.xml,添加下面内容





data-config.xml


SpringData_Solr_第28张图片

2 新建 data-config.xml

和 solrconfig.xml 同一目录下新建 data-config.xml



  
  
     
         
        
        
     
  


SpringData_Solr_第29张图片

data-config.xml文件中的name和managed-schema文件里面的name一一对应

data-config.xml

SpringData_Solr_第30张图片

managed-schema

SpringData_Solr_第31张图片

SpringData_Solr_第32张图片

3 添加 jar

向 solr-webapp 中添加三个 jar。在 dist 中两个还有一个数据库驱动。

没有找到数据库驱动jar包就上传

SpringData_Solr_第33张图片

去solr里面找对应的jar包

SpringData_Solr_第34张图片

** 表示通配

在这里插入图片描述

复制成功

SpringData_Solr_第35张图片

4 操作

重启 solr 后,在可视化管理页面中进行数据导入。

在这里插入图片描述

注意:
点击导入按钮后,要记得点击刷新按钮。

SpringData_Solr_第36张图片

报错说,内容大小有问题

SpringData_Solr_第37张图片

将100改为10

SpringData_Solr_第38张图片

不报错了

SpringData_Solr_第39张图片

执行查询,数据导入成功

SpringData_Solr_第40张图片

八、 菜单项目 Documents 使用办法

以 XML 格式举例

1 新增/修改

当 id 不存在时新增,当 id 存在修改。

将值赋给字段,点击提交将数据录入到库中 status为0代表成功

SpringData_Solr_第41张图片

通过id=1000进行查询

你可能感兴趣的:(笔记,lucene,spring,solr)