Solr的入门使用
Solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化,被很多需要搜索的网站中广泛使用。
Solr基于Lucene的Java搜索引擎服务器,其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。
Solr安装
目前使用环境:
- Java 1.8
- Solr 8.2.0版本
- Windows7
下载
我们可在官网下载Solr对应的版本。下载到相应位置并解压,可看到不同的文件目录。
- bin:solr的运行脚本
- contrib:solr的一些扩展jar包,用于增强solr的功能
- dist:该目录包含build过程中产生的jar文件,以及相关的依赖文件
- example:solr工程的例子目录
- licenses:solr相关的一些许可信息
启动
进入到bin目录,打开cmd窗口,运行solr start即可启动。Solr默认端口为8983,启动成功后可在浏览器访问localhost:8983/solr,如若启动成功,可看到Solr管理界面。
solr的操作
启动  	solr start
停止  	solr stop
重启		solr restart
状态  	solr status
配置中文分词器
Solr默认没有中文分词器,作为国人需要自己安装中文分词器,我使用的是IK-Analyzer-Solr8分词器。可在如下地址下载Jar包。
将下载的Jar包放入到~\solr-8.2.0\server\solr-webapp\webapp\WEB-INF\lib目录下,并配置~\solr-8.2.0\server\solr\configsets\_default\conf\managed-schema文件,加入以下配置代码。
<dynamicField name="*_txt_ik" type="text_ik"  indexed="true"  stored="true"/>
<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>
创建Core
在Solr中,每一个Core代表一个索引库,里面包含索引数据及其配置信息。Solr中可以拥有多个Core,也就是同进管理多个索引库、就像MySQL中可以有多个数据库一样。
Solr的bin目录下打开cmd窗口,运行solr create -c test_solr,test_solr是core名,可以自定义修改。创建成功后,会在~\solr-8.2.0\server\solr中出现相应的文件夹,里面需要注意managed-schema、solrconfig.xml两个配置文件。managed-schema定义了索引库的数据类型,同时指明某个类型的字段是不是要进行索引,是不是要进行保存到索引库里等等。solrconfig.xml则是包含了很多solr自身配置相关的参数。
这样我们就可以在Solr界面进行插入Field、插入数据、查询数据等等操作了。
Java操作Solr
引入Jar包
<dependency><groupId>org.apache.solr</groupId><artifactId>solr-solrj</artifactId><version>8.2.0</version>
</dependency>
定义对象
import org.apache.solr.client.solrj.beans.Field;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Worker{@Field("workid")private String workid;@Field("position")private String position;@Field("salary")private double salary;
}
Java连接Solr服务器
private final static String SOLR_URL = "http://localhost:8983/solr/test_solr2";HttpSolrClient solr = null;@Before
public void createSolrServer() {solr = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000).withSocketTimeout(60000).build();
}
增删改查
1、新增\修改数据
@Test
public void addDoc() throws SolrServerException, IOException {SolrInputDocument document = new SolrInputDocument();document.addField("workid", "20190730A82");document.addField("position", "前端工程师");document.addField("salary", 8000);solr.add(document);solr.commit();solr.close();System.out.println("添加成功");
}
2、删除数据
@Test
public void deleteDocById() throws SolrServerException, IOException {//server.deleteById("39b070b4-c1f6-4f2b-899c-b9f8916ebecc");solr.deleteByQuery("id:*");solr.commit();solr.close();
}
3、查询数据
@Test
public void querySolr() throws Exception {SolrQuery query = new SolrQuery();//下面设置solr查询参数//query.set("q", "*:*");// 参数q  查询所有   //query.set("q", "position:*工程*");//模糊查询//参数fq, 给query增加过滤查询条件 //query.addFacetQuery("salary:[6000 TO 9000]");//query.addFilterQuery("position:数据库*"); ////参数df,给query设置默认搜索域,从哪个字段上查找query.set("df", "position"); //参数sort,设置返回结果的排序规则query.setSort("salary",SolrQuery.ORDER.desc);//设置分页参数query.setStart(0);query.setRows(10);//设置高亮显示以及结果的样式query.setHighlight(true);query.addHighlightField("salary");  query.setHighlightSimplePre("<font color='red'>");  query.setHighlightSimplePost("</font>"); //执行查询QueryResponse response = solr.query(query);//获取实体对象形式List<Worker> worker = response.getBeans(Worker.class);worker.stream().forEach(System.out::println);//获取返回结果SolrDocumentList resultList = response.getResults();System.out.println(FastJsonUtils.toJSONString(resultList));
}
基本查询方式
q   查询的关键字,例如,q=id:1,默认为q=*:*,
fl 	指定返回哪些字段,用逗号或空格分隔,注意:字段区分大小写,例如,fl= id,title,sort
start 	返回结果的第几条记录开始,一般分页用,默认0开始
rows 	指定返回结果最多有多少条记录,默认值为 10,配合start实现分页
sort 	排序方式,例如id desc 表示按照 "id" 降序
wt(writer type)		指定输出格式,有 xml, json, php等
fq(filter query)	过虑查询,提供一个可选的筛选器查询。返回在q查询符合结果中同时符合的fq条件的查询结果,例如:q=id:1&fq=sort:[1 TO 5],找关键字id为1 的,并且sort是1到5之间的。
df 	默认的查询字段,一般默认指定。
qt(query type)	指定那个类型来处理查询请求,一般不用指定,默认是standard。
indent   返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。
version  查询语法的版本,建议不使用它,由服务器指定默认值。
检索运算符
:	指定字段查指定值,如返回所有值*:*
?	表示单个任意字符的通配
*	表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)
~	表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~将找到形如foam和roams的单词;roam~0.8,检索返回相似度在0.8以上的记录。
AND、||、OR、&&  	  布尔操作符
NOT、!、-	  排除操作符不能单独与项使用构成查询 
+	存在操作符,要求符号”+”后的项必须在文档相应的域中存在
( ) 	用于构成子查询
[] 	包含范围检索,如检索某时间段记录,包含头尾,date:[201507 TO 201510]
{} 	不包含范围检索,如检索某时间段记录,不包含头尾date:{201507 TO 201510}
注意点
在进行数据插入之前,一定要提前在managed-schema中定义索引字段、索引字段类型等等参数,不然使用默认类型的时候会出现不是自己想要的类型,然后出现不可预料的问题,建议自己提前定义好再进行数据插入。如果要进行分词搜索,可把相应字段定义text_ik分词类型(根据中英文或者自定义的分词名)。
相关文章:
Solr的入门使用
Solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化,被很多需要搜索的网站中广泛使用。…...
 
css鼠标样式 cursor: pointer
cursor: none; cursor:not-allowed; 禁止选择 user-select: none; pointer-events:none;禁止触发事件, 该样式会阻止默认事件的发生,但鼠标样式会变成箭头...
 
【解决】Kafka Exception thrown when sending a message with key=‘null‘ 异常
问题原因: 如下图,kafka 中配置的是监听域名的方式,但程序里使用的是 ip:port 的连接方式。 解决办法: kafka 中配置的是域名的方式,程序里也相应配置成 域名:port 的方式(注意:本地h…...
 
中心极限定理 简明教程
中心极限定理是概率论中的一组定理,它们描述了一些独立随机变量的和或平均值的分布在一定条件下趋近于正态分布的现象。中心极限定理有多种形式,其中最常见的是独立同分布的中心极限定理,它可以用数学公式表示为: 前提条件&#x…...
 
商城-学习整理-基础-库存系统(八)
一、整合ware服务 1、配置注册中心 2、配置配置中心 3、配置网关,重启网关 二、仓库维护 http://localhost:8001/#/ware-wareinfo 在前端项目module中创建ware文件夹保存仓库系统的代码。 将生成的wareinfo.vue文件拷贝到项目中。 根据功能,修改后台接…...
 
【C++ 学习 ⑬】- 详解 list 容器
目录 一、list 容器的基本介绍 二、list 容器的成员函数 2.1 - 迭代器 2.2 - 修改操作 三、list 的模拟实现 3.1 - list.h 3.2 - 详解 list 容器的迭代器 3.2 - test.cpp 一、list 容器的基本介绍 list 容器以类模板 list<T>(T 为存储元素的类型&…...
设计模式十五:命令模式(Command Pattern)
命令模式(Command Pattern)是一种行为型设计模式,它旨在将请求或操作封装成一个对象,从而允许你将不同的请求参数化,并且能够在不同的时间点执行或者队列化这些请求。这种模式使得请求发送者与接收者之间解耦ÿ…...
 
FPGA GTP全网最细讲解,aurora 8b/10b协议,HDMI视频传输,提供4套工程源码和技术支持
目录 1、前言免责声明 2、我这里已有的 GT 高速接口解决方案3、GTP 全网最细解读GTP 基本结构GTP 发送和接收处理流程GTP 的参考时钟GTP 发送接口GTP 接收接口GTP IP核调用和使用 4、设计思路框架HDMI输入视频配置及采集视频数据组包GTP aurora 8b/10b数据对齐视频数据解包图像…...
 
用dcker极简打包java.jar镜像并启动
用dcker极简打包java.jar镜像并启动 一、本地打包好jar包 二、新建文件夹,将步骤1中的jar包拷贝到文件夹下 三、同目录下新建Dockerfile ## 基础镜像,这里用的是openjdk:8 FROM openjdk:8## 将步骤一打包好的jar包 拷贝到镜像的 跟目录下[目录可以自定义…...
设计模式——创建型
1.单例模式 单例模式主要用于某个类有且只能用一个对象的场景,单例模式下不能外部实例化对象,由类内部自行私有化实例对象并提供一个可以获得该对象的方法。单例模式主要有饿汉模式(安全,但在编译时就会自动创建对象,…...
 
iTOP-i.MX8M开发板添加USB网络设备驱动
选中支持 USB 网络设备驱动,如下图所示: [*] Device Drivers→ *- Network device support → USB Network Adapters→ {*} Multi-purpose USB Networking Framework 将光标移动到 save 保存,如下图所示: 保存到 arch/arm64/c…...
 
分类预测 | MATLAB实现GAPSO-LSSVM多输入分类预测
分类预测 | MATLAB实现GAPSO-LSSVM多输入分类预测 目录 分类预测 | MATLAB实现GAPSO-LSSVM多输入分类预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.分类预测 | MATLAB实现GAPSO-LSSVM多输入分类预测 2.代码说明:要求于Matlab 2021版及以上版本。 程序…...
 
JMeter 的并发设置教程
JMeter 是一个功能强大的性能测试工具,可以模拟许多用户同时访问应用程序的情况。在使用 JMeter 进行性能测试时,设置并发是非常重要的。本文将介绍如何在 JMeter 中设置并发和查看报告。 设置并发 并发是在线程组下的线程属性中设置的。 线程数&#…...
数据治理有哪些产品
数据治理是现代企业管理中至关重要的一个环节。随着企业的数据量不断增长,如何有效地管理和利用数据成为了一个亟待解决的问题。幸运的是,市场上已经涌现出了许多优秀的数据治理产品,下面就来介绍一些常见的数据治理产品。 首先,我…...
 
windows安装go,以及配置工作区,配置vscode开发环境
下载安装go 我安装在D:\go路径下配置环境变量 添加GOROOT value为D:\go修改path 添加%GOROOT%\bin添加GOPATH value为%USERPROFILE%\go 其中GOPATH 是我们自己开发的工作区,其中包含三个folder bin,pkg,以及src,其中src为我们编写代码的位置 配置vscod…...
第五章nginx负载均衡
负载均衡:反向代理来实现 nginx的七层代理: 七层是最常用的反向代理方式,只能配置在nginx配置文件的hppt模块中。而且配置方法名称:upstream模块,不能写在server中,也不能在location中,在http…...
 
MATLAB计算一组坐标点的相互距离(pdist、squareform、pdist2函数)
如果有一组坐标P(X,Y),包含多个点的X和Y坐标,计算其坐标点之间的相互距离 一、坐标点 P[1 1;5 2;3 6;8 8;4 5;5 1; 6 9];二、pdist函数 输出的结果是一维数组,获得任意两个坐标之间的距离,但没有对应关系 Dpdist(P)三、square…...
 
我国农机自动驾驶系统需求日益增长,北斗系统赋能精准农业
中国现代农业的发展,离不开智能化、自动化设备,迫切需要自动驾驶系统与农用机械的密切结合。自动驾驶农机不仅能够缓解劳动力短缺问题,提升劳作生产效率,同时还能对农业进行智慧化升级,成为解决当下农业痛点的有效手段…...
 
防雷检测行业应用完整解决方案
防雷检测是指对雷电防护装置的性能、质量和安全进行检测的活动,是保障人民生命财产和公共安全的重要措施。防雷检测的作用和意义主要有以下几点: 防止或减少雷电灾害事故的发生。雷电是一种自然现象,具有不可预测、不可控制和高能量等特点&a…...
 
16.4 【Linux】特殊文件与程序
16.4.1 具有 SUID/SGID 权限的指令执行状态 SUID 的权限其实与程序的相关性非常的大!为什么呢?先来看看 SUID 的程序是如何被一般使用者执行,且具有什么特色呢? SUID 权限仅对二进制程序(binary program)…...
 
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
 
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
 
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
 
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
 
热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
 
Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...
 
结构化文件管理实战:实现目录自动创建与归类
手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题,进而引发后续程序异常。使用工具进行标准化操作,能有效降低出错概率。 需要快速整理大量文件的技术用户而言,这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB,…...
 
李沐--动手学深度学习--GRU
1.GRU从零开始实现 #9.1.2GRU从零开始实现 import torch from torch import nn from d2l import torch as d2l#首先读取 8.5节中使用的时间机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps) #初始化模型参数 def …...
