solr快速上手:整合SolrJ实现客户端操作(九)

news2024/11/27 18:36:54

0. 引言

我们前面学习了solr的服务端基础操作,实际项目中我们还需要在客户端调用solr,就像调用数据库一样,我们可以基于solrJ来实现对solr的客户端操作

1. SolrJ简介

SolrJ 是 Solr官方提供的 Java 客户端库,主要用于与 Solr 服务器进行交互。内部封装了一组API,可以方便地实现对solr服务端的各类操作。

使用 SolrJ,可以通过编写 Java 代码来实现对 Solr 的索引操作,比如增删改查。同时,SolrJ 还支持多种查询方式,如简单查询、复杂查询、分页查询、聚合查询等。同时也包括了对solr的索引管理、权限控制等操作

2. 项目引入SolrJ

1、引入jar包:https://central.sonatype.com/artifact/org.apache.solr/solr-solrj/8.2.0

<dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>8.2.0</version>
</dependency>

2、首先创建实体类,还是以我们在前几节创建的orders核心为例

注意:这里需要给字段上加上@Field注解,其值是该字段在solr中的字段名

@Data
public class Orders {

    @Field("id")
    private Long id;
    @Field("order_no")
    private String orderNo;
    @Field("address")
    private String address;
    @Field("product_name")
    private String productName;
    @Field("remarks")
    private String remarks;
    @Field("status")
    private Integer status;
    @Field("create_user")
    private String createUser;
    @Field("create_time")
    private Date createTime;
    @Field("labels")
    private List<String> labels;

}

3、创建一个配置类SolrProperties,用户声明配置项

@ConfigurationProperties(prefix = "solr")
@Component
@Data
public class SolrProperties {

    private String host;

    private Integer connectionTimeout;
    private Integer socketTimeout;

}

4、配置文件中添加对应的配置项

# solr地址
solr.host=http://192.168.244.41:8983/solr
# 连接超时
solr.connectionTimeout=10000
# 读取超时
solr.socketTimeout=3000

5、创建bean配置类SolrConfig,用于创建solr连接bean,注意这里我们演示的是单机版的solr,集群版的需要使用CloudSolrClient

@Configuration
public class SolrConfig {

    @Resource
    private SolrProperties solrProperties;

    @Bean
    public HttpSolrClient solrClient(){
        return new HttpSolrClient.Builder(solrProperties.getHost())
                .withConnectionTimeout(solrProperties.getConnectionTimeout())
                .withSocketTimeout(solrProperties.getSocketTimeout())
                .build();
    }
}

6、创建一个测试controller, 用于演示客户端的操作,因为我们之前已经配置了通过dataimport自动同步mysql数据到solr。所以solr本身的增删改,我们这里就不演示了,只要删除数据库后会自动同步,主要演示实现查询操作

@RestController
@RequestMapping("orders")
@AllArgsConstructor
public class OrdersController {
    private final HttpSolrClient solrClient;

    @GetMapping("search")
    public List<Orders> search(String productName, String address, String remarks, String labels) throws SolrServerException, IOException {
        SolrQuery query = new SolrQuery();
        if (!StringUtils.isEmpty(productName)) {
            query.setQuery("product_name:" + productName);
        }
        if (!StringUtils.isEmpty(address)) {
            query.setQuery("address:" + address);
        }
        if (!StringUtils.isEmpty(remarks)) {
            query.setQuery("remarks:" + remarks);
        }
        if (!StringUtils.isEmpty(labels)) {
            query.setQuery("labels:" + labels);
        }
        if(StringUtils.isEmpty(query.getQuery())){
            query.setQuery("*:*");
        }
        query.setStart(0);
        query.setRows(5);
        QueryResponse response = solrClient.query("orders",query);
        List<Orders> list = response.getBeans(Orders.class);
        return list;
    }

}

7、调用测试,结果数据正常显示

在这里插入图片描述

8、如果想要实现更多的操作, 可以在SolrClient类中看到支持的方法

在这里插入图片描述

3. 总结

更多的客户端操作,还要大家自己去探索,但是直接使用SolrJ还是感觉有些复杂,能不能更加简易地实现客户端操作呢,那就要提到我们的spring-data-solr了,下一节,我们继续学习!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java学习记录-8】集合

集合 特点结构Collection概述创建方式常用方法遍历方式 List概述遍历方式特有方法 特点 提供一种存储空间可变的存储类型&#xff0c;存储的数据容量可以随时发生改变 结构 Collection 概述 是单列集合的顶层接口&#xff0c;它表示一组对象&#xff0c;这些对象也称为Coll…

好用的生产型企业ERP系统有哪些?

一、好用的生产型企业ERP系统有哪些&#xff1f; 目前而言&#xff0c;制造型想要部署一款好用的ERP系统&#xff0c;通常可以从2个方向来考虑&#xff1a; 第一方向&#xff1a;传统IT软硬件。比如&#xff1a;传统ERP厂商SAP&#xff1b; 第二方向&#xff1a;与新一代数字…

基于Java人才招聘网站系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

函数参数的拓展

函数参数的默认值 C 中可以在函数声明时为参数提供一个默认值 当函数调用时没有提供默认参数的值&#xff0c;则使用默认值 参数的默认值必须在函数声明中指定 当函数声明时没有出现参数的默认值&#xff0c;而定义的时候出现参数的默认值&#xff0c;编译器会报错 当函数声…

软件测试面试题:如何测试App性能?

目录 为什么要做App性能测试&#xff1f; 怎么做App性能测试&#xff1f; 下面几款开源工具&#xff1a; APP性能测试关注哪些指标&#xff1f; 总结&#xff1a; 为什么要做App性能测试&#xff1f; 如果APP总是出现卡顿或网络延迟的情况&#xff0c;降低了用户的好感&am…

java面经 MySQL

存储引擎--MyISAM和InnoDB的区别 使用场景 对比 MySQL隔离级别--未提交读&#xff0c;提交读&#xff0c;可重复读&#xff0c;序列化 隔离级别含义 隔离级别 英文名称 含义 脏读 不可重复读 幻读 未提交读 READ UNCOMMITTED 可读取其它事务未提交的结果 √ √ √…

管理类联考——逻辑——真题篇——阅读新题型真题

阅读新题型真题 Part B-2010- Part B Directions: Read the following text and decide whether each of the statements is true or false. Choose T if the statement is true or F if the statement is not true. Mark your answers on ANSWER SHEET. (10 points) Copying…

Android——基本控件之下拉列表:Spinner(九)

1.知识点 &#xff08;1&#xff09;掌握下拉列表Spinner的使用&#xff1b; &#xff08;2&#xff09;可以通过程序配置Spinner显示内容&#xff1b; &#xff08;3&#xff09;可以通过配置文件配置Spinner显示内容。 2.具体内容 在html中&#xff0c;下拉列表使用<…

直击网络安全简史,现阶段提升免疫力是关键 | 产业安全观智库访谈

当下&#xff0c;AIGC、区块链、云计算等新兴技术发展如火如荼&#xff0c;网络安全的内涵与外延也随之出现许多变化&#xff0c;安全攻防也从早期的黑客炫技手段&#xff0c;演变为如今产业发展的底座。过去的20多年&#xff0c;网络安全行业出现了哪些新变化&#xff1f;安全…

springboot项目外卖管理 day06-用户端进行展示与下单操作

文章目录 一、用户地址簿1.1、需求分析1.2、功能展示 二、菜品展示2.1、需求分析 2.2、代码开发2.2.1、代码开发-梳理交互过程 2.3、功能测试 3、购物车功能3.1、需求分析3.2、数据模型3.3、代码开发3.3.1、代码开发-梳理交互过程3.3.2、代码开发-准备工作 4、下单4.1、需求分析…

C++算法:加权连通图的最小生成树(Kruskal)

文章目录 前言一、什么是最小生成树二、代码实现1、构建图2、生成树 总结原创文章&#xff0c;未经许可&#xff0c;严禁转载 前言 最小生成树算法就是在众多可行的方案中选择代价最小的方法。生活中我们经常会遇到类似可以抽象成最小生成树的例子&#xff1a;比如你要给家中布…

MYSQL数据库管理1

目录 数据库的基本概念 数据&#xff08;Data&#xff09; 表 数据库 数据库管理系统&#xff08;DBMS&#xff09; 数据库系统 数据库系统发展史 第一代数据库 第二代数据库 第三代数据库 当今主流数据库介绍 SQL Server&#xff08;微软公司产品&#xff09; Or…

3年经验来面试20K的测试岗,连基本功都不会,还不如去招应届生

这段时间公司项目急缺人手&#xff0c;面了不少人&#xff0c;竟然没有一个满意的。一开始瞄准的就是中高级的水准&#xff0c;也没指望来技术大牛&#xff0c;提供的薪资在15-25K&#xff0c;面试的人很多&#xff0c;但结果让人失望。 从简历上来说都是3-4年工作经验&#x…

python---列表和元组(2)

切片操作的基本使用 使用切片的时候省略边界 切片操作是一个比较高校的操作,进行切片的时候,只是取出了原有列表的一个部分,并不涉及到数据的拷贝,假设有一个很大的列表,进行切片,切片的范围也很大,即使如此,切片操作仍然非常高校. 切片操作还可以指定"步长",类比…

Leangoo领歌敏捷项目管理场景示例

Leangoo领歌​​​​​​​是一款专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c;提质增效、缩短周期、加速…

通过零代码ETLCloud实现金蝶云星空数据自动化同步

金蝶云星空系统介绍 金蝶云星空是一款基于云计算架构打造的全面财务管理软件&#xff0c;旨在为企业提供全方位、一站式的财务解决方案。其功能包括财务核算、现金管理、应付应收管理、成本核算、固定资产管理、税务管理等&#xff0c;覆盖了财务管理的各个方面&#xff0c;可…

【黄啊码】批量获取邮箱软件的下载和使用(外贸人必用的工具箱)

大家好&#xff0c;我是黄啊码&#xff0c;前两天有个朋友想通过邮箱实现获取邮箱地址&#xff0c;问我有没有类似的软件和教程&#xff0c;今天&#xff0c;他来了。。 该外贸软件可以按关键字收集电子邮件 使用内置的网站爬虫从网站中提取电子邮件和电话 与许多基于网络的工…

【DRAM存储器一】基本存储单元、阵列结构、读写原理

&#x1f449;个人主页&#xff1a;highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 参考书籍&#xff1a;《Memory Systems - Cache, DRAM, Disk》 目录 最小存储单…

深度学习笔记之Transformer(二)关于注意力分数的总结

深度学习笔记之Transformer——关于注意力分数的总结 引言回顾&#xff1a; Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归再回首&#xff1a; Seq2seq \text{Seq2seq} Seq2seq中的注意力机制注意力机制的泛化表示加性注意力机制缩放点积注意力机制 引言 上一…

Pytest教程__配置文件-pytest.ini(4)

pytest配置文件可以改变pytest的默认运行方式&#xff0c;它是一个固定的文件名称pytest.ini。 存放路径为项目的根目录 解决中文报错 在讲解配置文件的可用参数前&#xff0c;我们先解决一个高概率会遇到的问题&#xff0c; 那就是在pytest.ini文件 中不能使用任何中文符号&…