侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 292 篇文章
  • 累计创建 132 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Linux环境下solr 8.9的下载及安装配置

孔子说JAVA
2022-08-25 / 0 评论 / 0 点赞 / 73 阅读 / 6,879 字 / 正在检测是否收录...

solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。

1、solr介绍

solr基于Lucene的流行、高性能的开源企业级搜索平台。Lucene下的子项目。可以独立地提供全文搜索服务。在互联网项目里面,绝大部分是用全文检索服务器,lucense(基于java的全文检索api)和solr(基于lucense的全文检索服务器)都可以实现。用lucense需要自己来管理维护索引库,进行索引库的优化,缓存的添加。而solr配置一下就好了,比较方便。

  • solr本质上是一个war包,然后部署到servlet容器中,容器你可以选择用tomcat,也可以选择更加轻量级的jetty
  • 官网链接: https://lucene.apache.org/solr

Solr的特性

1)独立的企业级搜索服务,基于http以类-REST API 对外提供服务

  • 你可以通过http协议将文档以JSON/XML/CSV/binary格式发送给Solr进行索引。
  • 你通过http GET 请求进行查询,可返回JSON/XML/CSV/binary格式的搜索结果。

2)近实时的索引能力

  • 文档数据提交索引后,立马就可看到。

3)先进的全文检索能力

  • 基于Lucene的强大搜索能力,支持任意数据类型的短语、通配、连接、分组等等查询

4)综合的管理界面

  • Slor内建了综合的管理用户界面,让你方便的管理你的solr实例

5)通过简单的配置方式来提供高灵活性、适用性

6)高伸缩和容错能力

  • 基于zookeeper,solr支持分布式、备份、再平衡,来提供高伸缩和容错能力

7)插件体系架构,易扩展

  • Solr发布了许多定义良好的扩展点,这使得插件很容易插入索引和查询时的过程中。

Solr应用架构

image-1661161659831

要在系统中使用Solr只需完成以下三个步骤即可:

  • 在solr中定义一个schema(模式),来告诉solr你要索引的文档document由哪些Field构成。
  • 将需要让用户搜索的文档发送给solr
  • 在你的应用中公开搜索功能。应用的搜索功能通过调用Solr的搜索API实现。

2、solr的下载及安装

2.1 下载solr

下载solr,然后解压即可,windows和linux都可以下载 .tgz(.tgz本质是.tar.gz),和.zip解压出来都一样的。solr下载地址:

image-1661162009758

2.2 环境准备

Solr是java开发的,所以我们的环境需要安装jdk(JDK1.8及以上),另外Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中,我们这里选择自带的jetty服务器。

2.3 解压solr

把solr 的压缩包上传到Linux系统,然后解压。

tar -zxvf solr-8.9.0.tgz -C /usr/local/

如果是使用tomcat服务器,需要执行以下步骤:

  • 把解压的solr\server 下面的 solr-webapp 放到 tomcat 的 webapps 下面,修改solr-webapp为solr。
  • 将 solr\server\lib\ext 下的所有jar包拷贝到tomcat的 webapps\solr\WEB-INF\lib 目录。
  • 将 solr\server\resources 下的 log4j.properties 配置文件拷贝到tomcat的 webapps\solr\WEB-INF\classes 目录。

目录说明:

bin/ 该目录中包含几个重要的脚本。
solr/solr.cmd 这是 Solr 的控制脚本,用于启动和停止 Solr 服务。在 SlorCloud 模式下运行时,可以创建集合或内核,配置身份验证以及使用配置文件。
post 用于发布内容到 solr 的一个简单的命令行工具。
solr.in.sh/solr.in.cmd 此处配置 Java,Jetty 和 Solr 的系统级属性,即全局属性。
install_solr_services.sh 在 linux/unix 系统上将 Solr 安装为服务。
contrib/ 该目录包含 Solr 专用功能的附加插件。
dist/ 该目录包含主要的 Solr jar 文件。
docs/ solr 帮助文档。
example/ 包含几种演示各种 Solr 功能的示例。
licenses/ 包含 Solr 使用的第三方库的所有许可证。
server/ 该目录是 Solr 应用程序的核心所在:

  • Solr 的 Admin UI(server/solr-webapp)
  • Jetty 库(server/lib)
  • 日志文件(server/logs)和日志配置(server/resources)
  • 示例配置(server/solr/configsets)

2.4 创建索引核心库

到 /solr-8.9.0/server/solr下创建索引核心库: demoCore,然后将 /solr-8.9.0/server/solr/configsets/_default下的conf复制到新建索引核心库demoCore下

mkdir demoCore

cp -r /solr-8.9.0/server/solr/configsets/_default/conf  /solr-8.9.0/server/solr/demoCore

2.5 配置中文分词器

使用自带的中文分词器 lucene-analyzers-smartcn,将lucene-analyzers-smartcn.jar 复制到 solr-8.9.0/server/solr-webapp/webapp/WEB_INF/lib下。(也可以到官网/Maven 中央仓库(https://search.maven.org/) 下载IK分词器的jar包)

cp /solr-8.9.0/contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-8.9.0.jar  /solr-8.9.0/server/solr-webapp/webapp/WEB-INF/lib

maven仓库地址

<dependency>
    <groupId>com.github.magese</groupId>
    <artifactId>ik-analyzer</artifactId>
    <version>8.4.0</version>
</dependency>

在核心demoCore的conf里的managed-schema添加以下内容:

 <!-- 配置中文分词器 -->
<fieldType name="text_smartcn" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
    </analyzer>
</fieldType>

IK 分词器详细的使用可参考官网说明:https://github.com/magese/ik-analyzer-solr

2.6 采用自带的jetty启动

采用自带的jetty启动,默认的端口是8983,进入到 /solr-8.9.0/bin目录:

启动命令:./solr start -force
停止命令:./solr stop -all
重启命令:./solr restart -force

指定端口启动命令:./solr start [-p port]
指定端口停止命令:./solr stop [-p port]
  • 如果不指定端口,默认为 8983。

2.7 访问和配置

访问方式 http://ip:端口号/solr,例如: http://120.78.180.121:8983/solr

202208221

如果没有执行上述步骤4(即没有创建索引核心库),而是解压后直接采用步骤6启动访问,再通过solr管理界面创建索引核心库,则下图圈起的两处索引库名称可以随便填写(如orderCore),最好保持两处名称一致,然后保存,否则会提示保存报错,无法找到orderCore的solrconfig.xml。
这时需要从步骤2开始执行到步骤5。 创建你刚才所填写的名称库orderCore,重新启动访问,重新添加你刚才的索引库orderCore,保存则会成功。

202208222

2.8 添加需存储字段

添加需存储字段步骤为:

  • 1 选择所创建的核心库
  • 2 点击Schema
  • 3 添加字段
  • 4 填写字段名称
  • 5 选择字段类型

具体情况可以根据实际业务需求来做,如下图。

202208223

可以在 managed-schema 中查看添加的字段信息:

<field name="about" type="text_ik" uninvertible="true" indexed="true" stored="true"/>
<field name="age" type="pint" uninvertible="true" indexed="true" stored="true"/>
<field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="name" type="text_ik" uninvertible="true" indexed="true" stored="true"/>
<field name="poems" type="text_ik" uninvertible="true" indexed="true" stored="true"/>
<field name="success" type="text_ik" uninvertible="true" indexed="true" stored="true"/>

2.9 添加/更新文档

{"id": "123456","age": 40,"name": "李白","poems": "望庐山瀑布","about": "字太白","success": "创造了古代浪漫主义文学高峰、歌行体和七绝达到后人难及的高度"},
{"id": "123457","age": 31,"name": "杜甫","poems": "望岳","about": "字子美","success": "唐代伟大的现实主义文学作家,唐诗思想艺术的集大成者"}

image-1661387875556

2.10 查询文档

image-1661387903789

2.11 配置Solr管理界面权限

solr启动后默认是不用登入即可访问Solr管理界面的,这样暴露了Solr核心库,容易引起他人删除索引库数据,故配置登入权限才可访问Solr管理界面,步骤如下:

  1. 进入到 /solr-8.9.0/server/etc
  2. 在此目录下新建role.properties 配置文件(名字随意)打开文件进行编辑 , 内容如下:
#用户名 密码 权限
user:pass,admin
(如:admin:123456,admin)

也可配置多用户:

#用户名 密码 权限
user: pass,admin
user1: pass,admin
user3: pass,admin
  1. 添加获取用户文件的配置

找到目录: /solr-8.9.0/server/contexts,打开solr-jetty-context.xml文件进行编辑,在文件configure中添加获取用户文件的配置,内容如下:

<Get name="securityHandler">    
	 <Set name="loginService">    
	    <New class="org.eclipse.jetty.security.HashLoginService">    
	       <Set name="name">admin</Set>   <!--名称-->
	       <!-- 配置刚刚创建的角色文件地址 -->
	       <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/role.properties</Set>    
	    </New>    
	 </Set>    
</Get>
  1. 编辑web.xml

进入到 /solr-8.9.0/server/solr-webapp/webapp/WEB-INF下,编辑web.xml文件,在文件中找到security-constraint的配置,在之后追加以下内容,然后保存重启Jetty即可,此时再访问则需要登入。

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Solr</web-resource-name>
      <url-pattern>/</url-pattern>
    </web-resource-collection>   
	 <auth-constraint>      
		<role-name>admin</role-name>   <!-- 此处填写为你role.properties中设置的的角色名称 -->
	 </auth-constraint> 
  </security-constraint>
   <login-config>      
			<auth-method>BASIC</auth-method> 
			<realm-name>admin</realm-name>    <!-- 此处填写为你role.properties中设置的的用户名称-->
  </login-config>

image-1661166002045

0

评论区