solr7.4教程 使用solr的完整流程

本文详细介绍Solr的安装、配置及使用流程,包括core实例创建、schema配置、数据导入及solrJ客户端应用,旨在帮助初学者快速掌握全文搜索引擎Solr。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   由于最近公司业务可能需要用到solr所以花了几天时间研究了一下,发现solr在网上的教程没有太好的入门文章,要么文章所写的solr版本太老,要么就是介绍的内容不够完整。所有我打算写一篇有完整使用流程的solr教程希望能让后面新接触solr的同学能更容易掌握它,另一方面也是对自己所学做一个梳理。由于本人水平有限如果有书写不对的地方还请多多指正,万分感谢。
 

本文摘要

一、下载与安装

二、运行solr     

三、创建core实例

四、配置schema

五、DIH导入数据

六、solrJ(java客户端)

 

本文所用到的工具

Postman :简单说就是一个可以发送post请求的http客户端 这是官网地址https://www.getpostman.com/

IKAnalyzer中文分词器 :一个第三方分词器,下载地址https://download.youkuaiyun.com/download/u010510107/10558538

 

一、下载与安装:

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

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

          

 

二、运行solr

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

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

如图这句提示出现后证明服务启动成功(启动过程中如果打印java异常堆栈log4j2.xml 文件名、目录名或卷标语法不正确。没有关系不妨碍我们正常使用solr可以忽略此问题),接下来在浏览器输入http://localhost:8888/solr可以进入Admin UI界面验证是否启动成功如下图

此界面是用来管理solr的,此时solr服务器已经可以启动成功啦下面介绍一下其他比较常用的solr命令。

2. solr常用命令:

solr start –p 端口号 单机版启动solr服务

solr restart –p 端口号 重启solr服务

solr stop –p 端口号关闭solr服务

solr create –c name 创建一个core实例(core概念后面介绍)

此外有关于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配置文件的名字叫做schema.xml他的配置方式就是手工编辑,但是现在新版本的schema配置文件的名字叫做managed-schema,他的配置方式不再是用手工编辑而是使用schemaAPI来配置,官方给出的解释是使用schemaAPI修改managed-schema内容后不需要重新加载core或者重启solr更适合在生产环境下维护,如果使用手工编辑的方式更改配置不进行重加载core有可能会造成配置丢失,配置文件所在的路径如下图:

                

 

2.      schema主要成员:

(1)      fieldType:为field定义类型,最主要作用是定义分词器,分词器决定着如何从文档中检索关键字。

(2)      analyzer:他是fieldType下的子元素,这就是传说中的分词器,他由一组tokenizer和filter组成,如下图所示

(3)      field:他是创建索引用的字段,如果想要这个字段生成索引需要配置他的indexed属性为true,stored属性为true表示存储该索引。如下图所示每个field都要引用一种fieldType由type属性定义

这里描述的只是最常用的三个元素,关于更多schema的介绍请参考http://lucene.apache.org/solr/guide/7_4/documents-fields-and-schema-design.html

 

3.      Schema API:

Schema API其实就是用post请求向solr服务器发送携带json参数的请求,所有操作内容都封装在json中,如果是linux系统直接使用curl工具,如果是windows系统推荐使用Postman

 

这里以添加一个field为例,下面列出其他API:

add-field: add a new field with parameters youprovide.

delete-field: delete a field.

replace-field: replace an existing field withone that is differently configured.

观看更多API内容请参考http://lucene.apache.org/solr/guide/7_4/schema-api.html

4.中文分词器:

solr自带了一些中文分词器,比较好用的是SmartChineseAnalyzer,但是扩展性比较差不能自定义扩展中文词库,所以这里选择使用IKAnalyzer,这是第三方的一个分词器可以很好的扩展中文词库,IKAnalyzer下载后解压会有如下文件

 

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

 

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

 

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

    上图是ext.dic文件中的内容,注意编辑此文件时字符编码最好是UTF-8无BOM模式,这个可以通过EditPlus等文本编辑工具设置。下面开始在Schema中应用分词器如下图:

 

 

 

定义了一个text_ik这个字段类型并采用Ik分词器,接下来在field元素定义式指定type=text_ik就可以把这个分词器应用在这个field中。

接下来我们来验证下ik分词器,如下图:

 

五、DIH导入索引数据

1.      DIH简介:

DIH全称是Data Import Handler 数据导入处理器,顾名思义这是向solr中导入数据的,我们的solr目的就是为了能让我们的应用程序更快的查询出用户想要的数据,而数据存储在应用中的各种地方入xml、pdf、关系数据库中,那么solr首先就要能够获取这些数据并在这些数据中建立索引来达成快速搜索的目的,这里就列举我们最常用的从关系型数据库中向solr导入索引数据。

2.      在我们自己建立的core的目录下有conf目录,这里面有着几个很重要的配置文件,之前我们用到的managed-schema(老版本是schema.xml)也在其中,另外还有一个solrconfig.xml文件,这是我们DIH配置的第一步,需要在此文件中配置数据导入文件的映射位置如下图:

 

第二步配置数据导入文件,这个文件可以在solr根目录下的示例文件中copy一份到core/conf目录下,也就是跟solrconfig.xml在一个目录下,因为solrconfig.xml中配置的相对路径就是这里,当然也可以写绝对路径。如下图:

 

Copy过去之后这个文件名可以自定义,我就改成了MyDataConfig.xml,下面开始配置如下图:

 

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

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

(3)配置entity,可以把它当作与数据库中一个表对应,在query中书写查询sql。

(4)配置field与表中的字段与之对应。

        注意这里容易与schema中的配置混淆,我的理解是schema中配置的是创建索引的配置,而索引的创建需要有数据基础,而现在讲的数据导入文件就是建立索引的数据基础,他是创建索引的元数据。现在配置文件完成后可以用DIH命令执行了。

3.      DIH 命令

DIH命令就是用来执行数据导入的,命令种类繁多这里只列出简单常用。DIH命令采用的方式是URL的方式。

full-import:全部数据导入例如:

 

接下来验证下数据是否真的导入成功了,如下图

 

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.      导入solrJ依赖

如果你是用的是依赖管理工具如maven那么很简单直接添加依赖。

<dependency>

 <groupId>org.apache.solr</groupId>

 <artifactId>solr-solrj</artifactId>

 <version>7.4.0</version>

</dependency>

2.从solr中查询索引

 

3. 向solr添加更改索引

 

(1)java实体对象与solr索引映射

(2)向solr添加或更新索引,如果此实体在solr索引库中已有则作为更新操作

文章写到这里solr的基本使用就都介绍完了感谢大家的观看。

 

1 概述 4 1.1 企业搜索引擎方案选型 4 1.2 Solr的特性 4 1.2.1 Solr使用Lucene并且进行了扩展 4 1.2.2 Schema(模式) 5 1.2.3 查询 5 1.2.4 核心 5 1.2.5 缓存 5 1.2.6 复制 6 1.2.7 管理接口 6 1.3 Solr服务原理 6 1.3.1 索引 6 1.3.2 搜索 7 1.4 源码结构 8 1.4.1 目录结构说明 8 1.4.2 Solr home说明 9 1.4.3 solr的各包的说明 10 1.5 版本说明 11 1.5.1 1.3版本 11 1.5.2 1.4版本 12 1.6 分布式和复制 Solr 架构 13 2 Solr的安装与配置 13 2.1 在Tomcat下Solr安装 13 2.1.1 安装准备 13 2.1.2 安装过程 14 2.1.3 验证安装 15 2.2 中文分词配置 15 2.2.1 mmseg4j 15 2.2.2 paoding 19 2.3 多核(MultiCore)配置 22 2.3.1 MultiCore的配置方法 22 2.3.2 为何使用多core ? 23 2.4 配置文件说明 23 2.4.1 schema.xml 24 2.4.2 solrconfig.xml 25 3 Solr的应用 29 3.1 SOLR应用概述 29 3.1.1 Solr的应用模式 29 3.1.2 SOLR使用过程说明 30 3.2 一个简单的例子 30 3.2.1 Solr Schema 设计 30 3.2.2 构建索引 30 3.2.3 搜索测试 31 3.3 搜索引擎的规划设计 32 3.3.1 定义业务模型 32 3.3.2 定制索引服务 34 3.3.3 定制搜索服务 34 3.4 搜索引擎配置 34 3.4.1 Solr Schema 设计(如何定制索引的结构?) 34 3.5 如何进行索引操作? 36 3.5.1 基本索引操作 36 3.5.2 批量索引操作 37 3.6 如何进行搜索 39 3.6.1 搜索语法 39 3.6.2 排序 42 3.6.3 字段增加权重 42 3.6.4 Solr分词器、过滤器、分析器 42 3.6.5 Solr高亮使用 46 4 SolrJ的用法 46 4.1 搜索接口的调用实例 46 4.2 Solrj的使用说明 47 4.2.1 Adding Data to Solr 47 4.2.2 Directly adding POJOs to Solr 49 4.2.3 Reading Data from Solr 51 4.3 创建查询 51 4.4 使用 SolrJ 创建索引 52 4.5 Solrj包的结构说明 53 4.5.1 CommonsHttpSolrServer 53 4.5.2 Setting XMLResponseParser 53 4.5.3 Changing other Connection Settings 53 4.5.4 EmbeddedSolrServer 54 5 Solr的实际应用测试报告 54 5.1 线下压力测试报告 54 5.2 线上环境运行报告 54 6 solr性能调优 55 6.1 Schema Design Considerations 55 6.1.1 indexed fields 55 6.1.2 stored fields 55 6.2 Configuration Considerations 55 6.2.1 mergeFactor 55 6.2.2 mergeFactor Tradeoffs 56 6.3 Cache autoWarm Count Considerations 56 6.4 Cache hit rate(缓存命中率) 56 6.5 Explicit Warming of Sort Fields 56 6.6 Optimization Considerations 56 6.7 Updates and Commit Frequency Tradeoffs 56 6.8 Query Response Compression 57 6.9 Embedded vs HTTP Post 57 6.10 RAM Usage Considerations(内存方面的考虑) 57 6.10.1 OutOfMemoryErrors 57 6.10.2 Memory allocated to the Java VM 57 7 FAQ 58 7.1 出现乱码或者查不到结果的排查方法: 58
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值