Solr8.6.3安装与配置

一、Solr概述

Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

Solr类似开发的web项目,是一个war包,放入Servlet容器下就可以直接运行,因此Solr可以独立运行在Jetty、Tomcat等Servlet容器中。

二、搭建solr服务器(Tomcat)

1.下载

Solr官网
在这里插入图片描述
在这里插入图片描述

2.Tomcat和Solr整合

在tomcat的webapps目录下创建solr目录。

在这里插入图片描述

解压solr-8.6.3,找到D:\Program Files\solr-8.6.3\server\solr-webapp\webapp目录

在这里插入图片描述

将该目录下所有文件拷贝到tomcat的webapps/solr目录下

在这里插入图片描述

3.添加依赖与配置

找到D:\Program Files\solr-8.6.3\server\lib\ext目录,将所有jar包加入到tomcat的webapps/solr/WEB-INF/lib目录下。

在这里插入图片描述

将D:\Program Files\solr-8.6.3\server\resources目录下的所有文件复制到D:\Tomcat\apache-tomcat-9.0.30\webapps\solr\WEB-INF\classes目录下,classes目录不存在,需要创建

在这里插入图片描述
在这里插入图片描述

修改log4j2.xml配置文件,把所有${sys:solr.log.dir}修改为自己的指定的真实路径

修改前:
在这里插入图片描述
修改后:

这里再D:\Tomcat\apache-tomcat-9.0.30\webapps\solr目录下创建了logs文件夹

在这里插入图片描述

找到D:\Program Files\solr-8.6.3\server\lib目录,将除去jetty-*开头的所有jar包加入到tomcat的webapps/solr/WEB-INF/lib目录下。

在这里插入图片描述

4.创建工作空间

在tomcat的webapps/solr目录下创建solrHome目录,把该目录作为solr的工作空间,该工作空间主要用于存储创建索引的索引文件信息。

在这里插入图片描述

拷贝D:\Program Files\solr-8.6.3\server\solr\solr.xml到该目录(solrHome)下,solr才能识别该目录为solr工作空间。

在这里插入图片描述
在这里插入图片描述

5.指定solr工作空间

告诉solr的web工程solrhome的路径。打开tomcat的webapps/solr/WEB-INF下的web.xml文件

添加以下代码

<env-entry>
	<env-entry-name>solr/home</env-entry-name>
	<env-entry-value>自己定义的solrHome路径</env-entry-value>
	<env-entry-type>java.lang.String</env-entry-type>
 </env-entry>

注释以下代码

  <!-- Get rid of error message -->
  <!-- 
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Disable TRACE</web-resource-name>
      <url-pattern>/</url-pattern>
      <http-method>TRACE</http-method>
    </web-resource-collection>
    <auth-constraint/>
  </security-constraint>
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Enable everything but TRACE</web-resource-name>
      <url-pattern>/</url-pattern>
      <http-method-omission>TRACE</http-method-omission>
    </web-resource-collection>
  </security-constraint>
  -->

在这里插入图片描述

6.创建solr索引库

在solrHome目录下创建collection1目录,该目录用于存储创建的索引信息。

在这里插入图片描述

索引信息需要引入一些核心配置,对应核心配置在D:\Program Files\solr-8.6.3\server\solr\configsets目录下。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

拷贝configsets该目录下的任一目录中的config文件到D:\Tomcat\apache-tomcat-9.0.30\webapps\solr\solrHome\collection1目录中。

在这里插入图片描述

7.消除警告

当点击管理界面的logging,由于solr还依赖了其他包,会有警告信息,但不影响solr使用,所以此步可忽略。

将D:\Program Files\solr-8.6.3目录下的contrib和dist目录拷贝到tomcat的webapps/solr/solrHome目录下,并修改solrhome目录下的collection1/conf/solrconfig.xml

在这里插入图片描述
在这里插入图片描述

${solr.install.dir:}是指当前索引所在的位置,即collection1文件夹,这里从collection1里向上一级查找正好是contrib和dist目录。重启tomcat,黄色警告消失!

修改前:在这里插入图片描述
修改后:
在这里插入图片描述

8.启动Tomcat

在这里插入图片描述

访问http://localhost:8080/solr/index.html

在这里插入图片描述

由于手动创建的索引库并未交给solr管理,需要创建对应关联信息。左侧No cores available表示没有索引库,点击创建索引库。

在这里插入图片描述

点击Add Core后便会出现collection1索引库对应信息

在这里插入图片描述

三、管理界面介绍

1.Dashboard

Solr实例开始启动运行的时间、版本、系统资源、jvm等信息。

2.Logging

Solr运行日志信息

3.Core Admin

Solr Core的管理界面。可以添加/取消关联SolrCore实例。

4.java properties

Solr在JVM 运行环境中的属性信息,包括类路径、文件编码、jvm内存设置等信息。

5.Tread Dump

显示Solr Server中当前活跃线程信息,同时也可以跟踪线程运行栈信息。

6.Core selector

选择一个SolrCore进行详细操作。

dataimport

可以定义数据导入处理器,从关系数据库将数据导入到Solr索引库中。默认没有配置,需要手工配置。

Analysis

可以测试索引分析器和搜索分析器的执行情况。

FieldType: content是进行分词。

在这里插入图片描述
Document

通过/update表示更新索引,solr默认根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。可以创建索引、更新索引、删除索引等操作。

在这里插入图片描述
Query

通过/select执行搜索索引,必须指定“q”查询条件方可搜索。

在这里插入图片描述

四、中文分析器IK Analyzer

IK Analyzer概述

IK Analyzer 是一个开源的,基亍 java 语言开发的轻量级的中文分词工具包。从 2006年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 4 个大版本。最初,它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件。从 3.0 版本开始,IK 发展为面向 Java 的公用分词组件,独立亍 Lucene 项目,同时提供了对 Lucene 的默认优化实现。在 2012 版本中,IK 实现了简单的分词歧义排除算法,标志着 IK 分词器从单纯的词典分词向模拟语义分词衍化。

配置IK Analyzer

下载IK Analyzer
在这里插入图片描述

把 IKAnalyzer的依赖包添加到 webapps/solr/WEB-INF/ lib 目录下

在这里插入图片描述

把扩展词典、停用词词典、配置文件放到 solr 工程的 WEB-INF/classes 目录下。

在这里插入图片描述
IKAnalyzer.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
<properties>  
	<comment>IK Analyzer 扩展配置</comment>
	<!--配置自己的扩展字典 -->
	<entry key="ext_dict">ext.dic;</entry> 
	
	<!--配置自己的扩展停止词字典-->
	<entry key="ext_stopwords">stopword.dic;</entry> 
	
</properties>

修改D:\Tomcat\apache-tomcat-9.0.30\webapps\solr\solrHome\collection1\conf目录下的managed-schema文件,配置一个FieldType,使用 IKAnalyzer。
	<!--IKAnalyzer-->
	<fieldType name="text_ik" class="solr.TextField">
		<analyzer type="index">
			<!--useSmart表示是否不进行分词,true不分词,false分词-->
			<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" />
		</analyzer>
		<analyzer type="query">
			<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" />
		</analyzer>
	</fieldType>

在这里插入图片描述

上面的index和query的配置分别与客户端的analyzer相对应

在这里插入图片描述

使用Ik分词

在这里插入图片描述

五、配置域

SolrCore的conf目录下的managed-schema文件,此配置文件中定义了Filed域以及域的类型等一些配置。在solr中域必须先定义后使用。


域相当于数据库的表字段,根据业务需要定义相关的Field(域)。

1.域的常用属性

name:指定域的名称

type:指定域的类型

indexed:是否索引

stored:是否存储

required:是否必须

multiValued:是否多值,存储多个值时设置为true,solr允许一个Field存储多个值,比如存储商品的图片(有多个)

2.域

修改managed-schema文件 设置业务Field

在这里插入图片描述

<field name="item_id" type="string" indexed="true" stored="true"/>
	<field name="item_title" type="text_ik" indexed="true" stored="true"/>
	<field name="item_price" type="pfloat" indexed="true" stored="true"/>
	<field name="item_image" type="string" indexed="false" stored="true" />
	<field name="item_desc" type="text_ik" indexed="true" stored="true" />

3.复制域

将多个Field复制到一个Field中,以便进行统一的检索。当创建索引时,solr服务器会自动的将源域的内容复制到目标域中。

复制域的作用在于将某一个Field中的数据复制到另一个域中。在搜索关键词的时候,一般会挨着匹配搜,类似SQL的OR且效率比较低,使用复制域,将多个域的数据集中到一个域中搜索,提高查询效率,简言之就是多个域的值拼接到一起,组成一个新的域。。

source:源域

dest:目标域,搜索时,指定目标域为默认搜索域,可以提高查询效率。

定义目标域:
		<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>

目标域必须要使用:multiValued=“true”

使用复制域:
		<copyField source="item_title" dest="text"/>

SQL示例:

select * from item where title like '%华为%'  or brand like '%华为%' 

复制域示例:

select * from item where keywords like '%手机%'

示例:

将多个域的值拼接到一起,组成一个新的域。

在这里插入图片描述

	<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
	<copyField source="item_title" dest="item_keywords"/>
	<copyField source="item_price" dest="item_keywords"/>
	<copyField source="item_desc" dest="item_keywords"/>

在这里插入图片描述

4.动态域

当需要动态扩充字段时,就需要使用动态域。

<dynamicField name="*_s"  type="string"  indexed="true"  stored="true" />

name:动态域的名称,是一个表达式,*匹配任意字符,只要域的名称和表达式的规则能够匹配就可以使用。

配置:
在这里插入图片描述

<dynamicField name="item_test_*" type="string" indexed="true" stored="true" />

在这里插入图片描述

5.主键域

uniqueKey,相当于主键,每个文档中必须有一个id域。

<uniqueKey>id</uniqueKey>

6.域类型

 <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
 <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
  <fieldType name="pint" class="solr.IntPointField" docValues="true"/>
    <fieldType name="pfloat" class="solr.FloatPointField" docValues="true"/>
    <fieldType name="plong" class="solr.LongPointField" docValues="true"/>
    <fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>
	 <fieldType name="pdate" class="solr.DatePointField" docValues="true"/>
    <fieldType name="pdates" class="solr.DatePointField" docValues="true" multiValued="true"/>
     <fieldType name="binary" class="solr.BinaryField"/>
      <fieldType name="random" class="solr.RandomSortField" indexed="true" />
      
  <fieldType name="managed_en" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.ManagedStopFilterFactory" managed="english" />
        <filter class="solr.ManagedSynonymGraphFilterFactory" managed="english" />
        <filter class="solr.FlattenGraphFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.ManagedStopFilterFactory" managed="english" />
        <filter class="solr.ManagedSynonymGraphFilterFactory" managed="english" />
      </analyzer>
    </fieldType>
name:域类型的名称

class:指定域类型的solr类型。

analyzer:指定分词器。在FieldType定义的时候最重要的就是定义这个类型的数据在建立索引和进行查询的时候要使用的分析器analyzer,包括分词和过滤。

type:index和query。Index 是创建索引,query是查询索引。

tokenizer:指定分词器

filter:指定过滤器

六、Spring Data Solr操作Solr

Spring Data Solr之快速入门

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeDevMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值