solr 安装和使用

这篇具有很好参考价值的文章主要介绍了solr 安装和使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Solr是基于ApacheLucene构建的流行、快速、开源的企业搜索平台

Solr具有高度可靠性、可扩展性和容错性,提供分布式索引、复制和负载平衡查询、自动故障切换和恢复、集中配置等功能。Solr为许多世界上最大的互联网站点提供搜索和导航功能

环境准备

linux centos7

java8

solr8.11.2

笔者使用 centos7,已经安装Java环境,java 版本是 java8,solr 版本是8.11.2

目录

1、solr 安装

1.1、linux solr 安装

1.1.1、下载 solr 安装包

1.1.2、启动 solr

1.1.3、Admin Web管理页面

1.1.4、创建 solr 实例

1.1.5、关闭 solr

1.1.6、添加中文分词

1.2、docke solr 安装

1.2.1、docker 安装 solr

1.2.2、创建实例

1.2.3、添加中文分词

2、Java API

2.1、项目搭建

2.2、solr中定义域名和域的类型

2.3、Java API 测试


1、solr 安装

1.1、linux solr 安装

1.1.1、下载 solr 安装包

solr官网:https://solr.apache.org/

solr下载地址:https://solr.apache.org/downloads.html

solr 安装和使用

下载完成

solr 安装和使用

下载后,将solr-8.11.2.tgz上传到 linux 

solr 安装和使用

创建 solr 安装目录

mkdir -p /usr/local/solr

将solr安装包解压到安装目录

tar -zxf solr-8.11.2.tgz -C /usr/local/solr

进入solr安装目录

cd /usr/local/solr/solr-8.11.2

solr 安装和使用

1.1.2、启动 solr

bin/solr start

如果执行命令 bin/solr start 启动报错启动不起来,执行下面命令

bin/solr start -force

笔者执行 bin/solr start -force 命令启动

solr 安装和使用

如果想要去除启动时的警告日志,可以将bin目录下 solr.in.sh 文件的 SOLR_ULIMIT_CHECKS 设置成 false

solr 安装和使用

SOLR_ULIMIT_CHECKS=false solr 安装和使用

 修改

solr 安装和使用

笔者这里没有修改 SOLR_ULIMIT_CHECKS 配置

1.1.3、Admin Web管理页面

solr 启动后,浏览器访问Linux ip地址+端口号8983,访问 Admin Web管理页面

如果访问不到,防火墙开放端口 8983

firewall-cmd --zone=public --add-port=8983/tcp --permanent

更新防火墙规则(无需断开连接,动态添加规则)

firewall-cmd --reload

笔者ip地址是192.168.1.104,笔者访问地址 http://192.168.1.104:8983/solr

solr 安装和使用

1.1.4、创建 solr 实例

创建实例名称为 solr_book 的实例

bin/solr create -c solr_book

如果上面命令创建不成功,执行命令 bin/solr create -c solr_book -force

bin/solr create -c solr_book -force

solr 安装和使用

创建成功后,在 Admin Web管理页面查看

solr 安装和使用

1.1.5、关闭 solr

bin/solr stop -all

solr 安装和使用

1.1.6、添加中文分词

solr 默认没有中文分词,中文分词需要手动添加,这里使用 ik-analyzer-8.5.0.jar

ik-analyzer GitHub 地址:https://github.com/magese/ik-analyzer-solr

下载 ik-analyzer-8.5.0.jar

solr 安装和使用

将 ik-analyzer-8.5.0.jar 上传到 Linux

solr 安装和使用

将 ik-analyzer-8.5.0.jar 移动到 /usr/local/solr/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/lib 目录

mv /root/ik-analyzer-8.5.0.jar /usr/local/solr/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/lib

 进入 /usr/local/solr/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/lib 目录

cd /usr/local/solr/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/lib

查看 ik-analyzer-8.5.0.jar 是否移动成功

solr 安装和使用 solr 安装和使用

移动成功

进入solr目录查看创建的实例

cd /usr/local/solr/solr-8.11.2/server/solr

可以看到上面创建的实例 solr_book

solr 安装和使用

进入实例配置目录

cd solr_book/conf

solr 安装和使用

编辑 managed-schema ,或者将 managed-schema 下载下来添加配置再上传回去

vi managed-schema

在managed-schema末尾添加下面配置

<!-- ik分词器 -->
<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>

笔者是将 managed-schema下载下来后编辑,再上传上去

SFTP下载命令

get /usr/local/solr/solr-8.11.2/server/solr/solr_book/conf/managed-schema

solr 安装和使用

将修改后的 managed-schema 移动到原来目录的位置

mv /root/managed-schema /usr/local/solr/solr-8.11.2/server/solr/solr_book/conf/

solr 安装和使用

关闭 solr 后重新启动

solr 安装和使用

Admin Web管理页面查看添加的中文分词

solr 安装和使用

中文分词测试

solr 安装和使用

1.2、docke solr 安装

使用 docker 安装 solr

1.2.1、docker 安装 solr

拉取 solr 镜像

docker pull solr:8.11.2

开启容器

docker run --name solr_demo -d -p 8983:8983 solr:8.11.2 

solr 安装和使用

开启容器后,浏览器访问宿主机器ip+8983端口,访问 Admin Web管理页面

solr 安装和使用

1.2.2、创建实例

创建实例 shop_solr

docker exec -it solr_demo solr create_core -c shop_solr

solr 安装和使用

创建后可在 Admin Web管理页面查看

solr 安装和使用

1.2.3、添加中文分词

步骤和 linux 安装 solr 添加中文分词一样,先添加 ik-analyzer-8.5.0.jar 包,然后在 managed-schema 中添加配置

docker cp ik-analyzer-8.5.0.jar solr_demo:/opt/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/lib

solr 安装和使用

将 docker 容器中的 managed-schema 文件复制出来进行修改

docker cp solr_demo:/var/solr/data/shop_solr/conf/managed-schema /root

solr 安装和使用

添加下面配置

<!-- ik分词器 -->
<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>

在managed-schema 文件中添加配置和上面Linux安装solr添加中文分词处理一样,可以编辑managed-schema 文件或下载下来再处理,这里不再赘述

修改后,将 managed-schema 文件复制到 docker 容器

docker cp /root/managed-schema solr_demo:/var/solr/data/shop_solr/conf/

重启 solr 容器

docker restart solr_demo

solr 安装和使用

Admin Web管理页面查看添加的中文分词

solr 安装和使用

2、Java API

这里新建一个springboot项目

2.1、项目搭建

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.7</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.wsjz</groupId>
	<artifactId>solr-learn</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>solr-learn</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-solr</artifactId>
            <version>2.4.13</version>
        </dependency>
        
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

SolrConfig 配置类

package com.wsjz.config;

import org.apache.solr.client.solrj.SolrClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.solr.core.SolrTemplate;

@Configuration
public class SolrConfig {

	@Autowired
	private SolrClient solrClient;

	@Bean
	public SolrTemplate solrTemplate() {
		return new SolrTemplate(solrClient);
	}

}

Book 实体类

package com.wsjz.bean;

import org.apache.solr.client.solrj.beans.Field;
import org.springframework.data.annotation.Id;
import org.springframework.data.solr.core.mapping.SolrDocument;

import lombok.Data;

@Data
@SolrDocument(collection = "solr_book")
public class Book {

	@Id
	@Field
	private String id;

	/**
	 * 书名
	 */
	@Field
	private String name;

	/**
	 * 作者
	 */
	@Field
	private String author;

	/**
	 * 介绍
	 */
	@Field
	private String introduce;

}

HighlightBook 实体类

package com.wsjz.bean;

import java.util.List;

import org.springframework.data.solr.core.query.result.HighlightEntry;

import lombok.Data;

@Data
public class HighlightBook extends Book {

	/**
	 * 存储高亮字段
	 */
	private List<HighlightEntry.Highlight> highlight;

	@Override
	public String toString() {
		String snipplets = "";
		for (HighlightEntry.Highlight h : highlight) {
			snipplets += h.getSnipplets().toString();
		}

		return "HighlightBook [highlight=" + snipplets + "]" + super.toString();
	}

}

BookController

package com.wsjz.controller;

import java.util.List;
import java.util.stream.Collectors;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.core.query.Criteria;
import org.springframework.data.solr.core.query.HighlightOptions;
import org.springframework.data.solr.core.query.SimpleHighlightQuery;
import org.springframework.data.solr.core.query.SimpleQuery;
import org.springframework.data.solr.core.query.result.HighlightEntry;
import org.springframework.data.solr.core.query.result.HighlightPage;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.wsjz.bean.Book;
import com.wsjz.bean.HighlightBook;

@RestController
public class BookController {

	@Autowired
	private SolrTemplate solrTemplate;

	/**
	 * solr实例名称
	 */
	private static final String collection = "solr_book";

	/**
	 * 添加
	 * 
	 * @return
	 */
	@RequestMapping("/add")
	public String add() {
		Book book = new Book();
		book.setName("红楼梦");
		book.setAuthor("曹雪芹");
		book.setIntroduce("《红楼梦》,原名《石头记》,中国古代章回体长篇小说,中国古典四大名著之一");

		solrTemplate.saveBean(collection, book);
		solrTemplate.commit(collection);
		return "add ok";
	}

	/**
	 * 删除
	 * 
	 * @param id
	 * @return
	 */
	@RequestMapping("/del/{id}")
	public String del(@PathVariable("id") String id) {
		solrTemplate.deleteByIds(collection, id);
		solrTemplate.commit(collection);
		return "del ok";
	}

	/**
	 * 修改
	 * 
	 * @param id
	 * @return
	 */
	@RequestMapping("/update/{id}")
	public String update(@PathVariable("id") String id) {
		Book book = new Book();
		book.setId(id);
		book.setName("西游记");
		book.setAuthor("吴承恩");
		book.setIntroduce("《西游记》是明代吴承恩创作的中国古代第一部浪漫主义章回体长篇神魔小说");

		// 有id进行修改操作
		solrTemplate.saveBean(collection, book);
		solrTemplate.commit(collection);
		return "update ok";
	}

	/**
	 * 查询
	 * 
	 * @return
	 */
	@RequestMapping("/query")
	public String query() {
		Criteria criteria = Criteria.where("introduce").is("古典");
		SimpleQuery query = new SimpleQuery(criteria);
		Page<Book> page = solrTemplate.query(collection, query, Book.class);
		List<Book> list = page.getContent();
		list.forEach(System.out::println);
		return "query ok";
	}

	/**
	 * 分页查询
	 * 
	 * @return
	 */
	@RequestMapping("/find")
	public String find(Integer pageNum, Integer pageSize) {
		Criteria criteria = Criteria.where("introduce").is("古典");
		SimpleQuery query = new SimpleQuery(criteria);
		// 通过id降序排序
		query.setPageRequest(PageRequest.of(pageNum - 1, pageSize, Sort.by(Sort.Direction.DESC, "id")));

		Page<Book> page = solrTemplate.query(collection, query, Book.class);
		List<Book> list = page.getContent();
		// 总页数
		int pages = page.getTotalPages();
		// 总条数
		long total = page.getTotalElements();
		list.forEach(System.out::println);
		System.out.println(pages);
		System.out.println(total);

		return "find ok";
	}

	/**
	 * 高亮查询
	 * 
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	@RequestMapping("/highlightFind")
	public String highlightFind(Integer pageNum, Integer pageSize) {
		Criteria criteria = Criteria.where("introduce").is("古典");
		// 高亮查询
		SimpleHighlightQuery query = new SimpleHighlightQuery(criteria);
		// 通过id降序排序
		query.setPageRequest(PageRequest.of(pageNum - 1, pageSize, Sort.by(Sort.Direction.DESC, "id")));

		HighlightOptions highlightOptions = new HighlightOptions();
		highlightOptions.addField("introduce");
		highlightOptions.setSimplePrefix("<span style='color:red'>");
		highlightOptions.setSimplePostfix("</span>");
		query.setHighlightOptions(highlightOptions);

		HighlightPage<Book> page = solrTemplate.queryForHighlightPage(collection, query, Book.class);
		List<Book> content = page.getContent();
		List<HighlightBook> list = content.stream().map(book -> {
			HighlightBook highlightBook = new HighlightBook();
			BeanUtils.copyProperties(book, highlightBook);
			List<HighlightEntry.Highlight> highlights = page.getHighlights(book);
			highlightBook.setHighlight(highlights);
			return highlightBook;
		}).collect(Collectors.toList());

		// 总页数
		int pages = page.getTotalPages();
		// 总条数
		long total = page.getTotalElements();
		list.forEach(System.out::println);
		System.out.println(pages);
		System.out.println(total);

		return "highlightFind ok";
	}

}

2.2、solr中定义域名和域的类型

solr中域名和域的类型,等同于mysql中表字段和表字段类型

上面有Book实体类,有字段name、author、introduce;需要在solr中定义对应的域,以及对应的分词器

这里笔者对introduce字段进行中文分词,使用上面配置的中文分词器 text_ik

需要在solr_book实例下面的managed-schema文件中添加域的配置

<field name="name" type="string" indexed="true" stored="true" multiValued="false" />
<field name="author" type="string" indexed="true" stored="true" multiValued="false" />
<field name="introduce" type="text_ik" indexed="true" stored="true" multiValued="false" />

下面笔者使用 Linux 搭建的 solr 进行操作

编辑 managed-schema 文件

vi /usr/local/solr/solr-8.11.2/server/solr/solr_book/conf/managed-schema

在managed-schema文件末尾添加域的配置

配置后重启 solr

bin/solr restart -force

solr 安装和使用

2.3、Java API 测试

测试添加

浏览器请求:http://localhost:8080/

然后在Admin Web管理页面查询

solr 安装和使用

 solr 安装和使用

测试删除 

通过id删除

solr 安装和使用

测试修改

修改前先添加一条

solr 安装和使用

测试查询

solr 安装和使用

测试分页查询

solr 安装和使用

 测试高亮查询

solr 安装和使用

至此完文章来源地址https://www.toymoban.com/news/detail-469430.html

到了这里,关于solr 安装和使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PyCharm安装使用2023年教程,PyCharm与现流行所有编辑器对比。

    与PyCharm类似的功能和特性的集成开发环境(IDE)和代码编辑器有以下几种: Visual Studio Code(VS Code):由Microsoft开发,VS Code是一个高度可定制和可扩展的代码编辑器。它支持多种编程语言,包括Python,并提供众多扩展以增强功能。 IntelliJ IDEA:PyCharm本身就是基于JetBrains开发的

    2024年02月14日
    浏览(54)
  • solr快速上手:整合SolrJ实现客户端操作(九)

    我们前面学习了solr的服务端基础操作,实际项目中我们还需要在客户端调用solr,就像调用数据库一样,我们可以基于 solrJ 来实现对solr的客户端操作 SolrJ 是 Solr官方提供的 Java 客户端库,主要用于与 Solr 服务器进行交互。内部封装了一组API,可以方便地实现对solr服务端的各

    2024年02月10日
    浏览(39)
  • 基于 SuperMap iDesktopX 快速构建参数化管道模型

    目录 前言 一、准备数据 1.1 准备管线二维数据 1.2 管径属性字段值构建 1.3 管道材质构建 二、操作步骤 2.1 二维线转三维线 2.2 放样 三、结果展示        在管网项目中,经常遇到根据点、线数据制作管点管线模型。超图最快且性能最佳的方案是将管点管线模型做成三维管点

    2024年02月03日
    浏览(47)
  • 快速构建和安装干净的 ESXi 8 镜像指南

    申请的 ESXi 8 的免费授权到了,所以趁着春节假期最后一天,折腾一把。这篇文档支持 ESXi 8 及以下版本的安装镜像构建,无需麻烦的依赖安装和解决环境问题。 相比较安装运行网上已经构建好的黑盒镜像,为什么不自己进行构建呢? 2021 年,我曾写过一篇如何构建 ESXi 7 的安

    2024年01月25日
    浏览(29)
  • 【Solr】体验极速安装solr

    solr是基于java开发的,所以solr需要用到jdk环境,并且solr需要在tomcat容器中才能运行,所以需要提前配置好jdk和tomcat环境。 需要注意的是: src.tgz:带src表示是带源码文件的压缩包,无src是已经编译过的压缩包 .tgz:Linux相关操作系统使用的压缩包 .zip:Windows操作系统使用的压缩包

    2024年02月11日
    浏览(33)
  • 基于SqlSugar的开发框架循序渐进介绍(28)-- 快速构建系统参数管理界面

    在参照一些行业系统软件的时候,发现一个做的挺不错的系统功能-系统参数管理,相当于把任何一个基础的系统参数碎片化进行管理,每次可以读取一个值进行管理,这样有利于我们快速的处理业务需求,是一个挺好的功能。本篇随笔模拟这个功能,基于SqlSugar开发框架的基

    2023年04月23日
    浏览(43)
  • 基于开源的 ChatGPT Web UI 项目,快速构建属于自己的 ChatGPT 站点

    作为一个技术博主,了不起比较喜欢各种折腾,之前给大家介绍过 ChatGPT 接入微信,钉钉和知识星球(如果没看过的可以翻翻前面的文章),最近再看开源项目的时候,发现了一个 ChatGPT Web UI 项目。 想着刚好之前没有将 ChatGPT 接入过 Web UI ,有了这个开源项目可以拿来使用,

    2023年04月10日
    浏览(43)
  • Solr框架 01 Solr框架简介,安装,配置(Analysis,Dataimport)

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

    2024年02月11日
    浏览(35)
  • 基于Dify和AIGC2D快速构建你的智能对话和功能应用

    AIGC2D是一家为开发者提供GPT4.0接口代理的技术平台,开发者无需注册OpenAI的账号,就可以使用GPT3.5,GPT4.0的接口,免去国内访问不了openai,没有国外信用卡的烦恼 AIGC2D官方地址: https://www.aigc2d.com Dify 的目标是让开发者(甚至非开发者)可以快速基于大型语言模型搭建出有用的东西

    2024年02月13日
    浏览(47)
  • 如何基于 Apache Doris 与 Apache Flink 快速构建极速易用的实时数仓

    随着大数据应用的不断深入,企业不再满足离线数据加工计算的时效,实时数据需求已成为数据应用新常态。伴随着实时分析需求的不断膨胀,传统的数据架构面临的成本高、实时性无法保证、组件繁冗、运维难度高等问题日益凸显。为了适应业务快速迭代的特点,帮助企业

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包