solr学习篇(四) java使用solr简单查询(初识solrj)
使用java实现solr查询
目录:1:导入jar包
一 导入jar包
solrj可以使Java应用程序很方便的访问与操作solr。
solrj有几个核心类,分别为:1.SolrClient 2.SolrRequests 3.SolrQuerys 4.SolrReponses
tips:该jar包可以在${solr.home}/dist 找到

Maven依赖
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>x.y.z</version>
</dependency>
Gradle依赖(我这里用的是gradle)
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
compile group: 'org.apache.solr', name: 'solr-solrj', version: '7.4.0'
compile('org.springframework.boot:spring-boot-starter-data-solr')
}
二 核心类介绍:
1. SolrClient (操作solr的核心类):
由于SolrClient是抽象的,因此要连接solr的远程服务需要创建HttpSolrClient 或者 CloudSolrClient 对象,两者都是以Http请求与solr通信,只不过前者需要一个明确的solr地址信息,后者是基于zookeeper的地址并对solrCloud进行操作,在这里是基于前者的教程
创建代码:
String urlString = "http://localhost:8983/solr/test";
SolrClient solr = new HttpSolrClient.Builder(urlString).build();
solrClient常用方法:
public UpdateResponse add(String collection, SolrInputDocument doc) throws SolrServerException, IOException |
向solr中添加一条数据 参数: collection:在对应的core中添加数据 doc:该参数封装了具体要添加的值 |
public UpdateResponse addBean(String collection,Object obj) throws IOException, SolrServerException |
将对应的bean添加至文档索引当中 |
public UpdateResponse commit(String collection) throws SolrServerException, IOException |
提交本次操作的数据 |
public UpdateResponse rollback(String collection) throws SolrServerException, IOException |
回滚本次操作的数据 |
public UpdateResponse deleteById(String collection, String id) throws SolrServerException, IOException |
根据唯一索引删除索引信息 |
public UpdateResponse deleteByQuery(String collection, String query) throws SolrServerException, IOException |
根据查询删除索引里的文档信息 |
public SolrDocument getById(String id, SolrParams params) throws SolrServerException, IOException |
根据ID进行查询 |
public QueryResponse query(String collection, SolrParams params, METHOD method) throws SolrServerException, IOException |
查询方法 参数: collection:查询的core solrParams:查询参数对象 method:Http请求方式 |
2.SolrDocumentBase
该类是抽象类,并实现Map接口,子类包含SolrDocument和SolrInputDocument。该类主要作用是代表了solr索引中的一条数据信息,对象中的field值必须在magage-schema中定义。通常需要操作solr索引字段时用到SolrInputDoucument
该类常用方法:
void addField(String name, Object value) |
向solr中索引中添加一个Field |
Object getFieldValue(String name) |
根据field获取对应的第一个值或者一组值 |
Collection<String> getFieldNames() |
获取所有的Fields信息 |
3.SolrParams
该类是抽象类,主要用于封装与solr请求时所传的参数信息。该类最常用的子类为SolrQuery, SolrQuery类提供了查询所需的分组,高亮,排序等方法
3.1 SolrInputDocument:
void addField(String name, Object value) |
在索引添加一条Field对应的值 |
void setField(String name, Object value) |
在索引中更新一条Field对应的值 |
3.2 SolrQuery:
ModifiableSolrParams set( String name, String ... val ) |
设置对应的查询参数,具体见下方实例 |
SolrQuery addHighlightField(String f) |
添加高亮显示字段 |
SolrQuery addFilterQuery(String ... fq) |
添加过滤字段 |
SolrQuery addSort(String field, ORDER order) |
添加排序字段 |
4.SolrResponse
该类是抽象类,主要用于solr对用户请求之后做出的响应。
三 代码实现
package com.example.solrdemo; import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList; import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map; /**
* @Author:lyf
* @Description:YanFei.Liu
* @Program: Main
* @Date: 2018/7/9 8:56
*/
public class Main {
private static final String SOLR_URL = "http://localhost:8983/solr/test"; public static void main(String[] args) throws SolrServerException, IOException {
//创建solr客户端连接
HttpSolrClient hsc = new HttpSolrClient.Builder(SOLR_URL).build();
//创建查询对象
SolrQuery query = new SolrQuery();
//query.setQuery("*:*");//设置查询全部数据的条件
query.setQuery("stuname:酒店"); //列名:值 List<Map<String, Object>> list = getSolrQuery(hsc, query);
if (list == null) {
System.out.println("未查询到任何结果");
return;
}
for (Map<String, Object> map : list) {
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
Object value = map.get(key);
System.out.println(key + "----" + value);
}
System.out.println("=======================================");
}
} public static List<Map<String, Object>> getSolrQuery(HttpSolrClient client, SolrQuery query) throws SolrServerException, IOException {
List<Map<String, Object>> list = null;
//执行查询并返回结果
QueryResponse resp = client.query(query);
SolrDocumentList results = resp.getResults();
//获取查询到的数据总量
long numFound = results.getNumFound();
//判断总量是否大于0,
if (numFound <= 0) {
//如果小于0,表示未查询到任何数据,返回null
return null;
} else {
//如果大于0,表示有数据
//创建list存储每条数据
list = new ArrayList<>();
//遍历结果集
for (SolrDocument doc : results) {
//得到每条数据的map集合
Map<String, Object> map = doc.getFieldValueMap();
//添加到list
list.add(map);
}
//返回list集合
return list;
}
}
}
可以看出主要用的是solrj中的client和common

有兴趣的可以自己探究一下solrj里的源码
四 注意事项

这是solr的code,查询一定要带上
如果不带的话就会报如下错误:

solr学习篇(四) java使用solr简单查询(初识solrj)的更多相关文章
- solr学习篇(二) solr 分词器篇
关于solr7.4搭建与配置可以参考 solr7.4 安装配置篇 在这里我们探讨一下分词的配置 目录 关于分词 配置分词 验证成功 1.关于分词 1.分词是指将一个中文词语拆成若干个词,提供搜索引擎 ...
- Solr学习笔记之3、Solr dataimport - 从SQLServer导入数据建立索引
Solr学习笔记之3.Solr导入SQLServer数据建立索引 一.下载MSSQLServer的JDBC驱动 下载:Microsoft JDBC Driver 4.0 for SQL Server ...
- Solr学习笔记之4、Solr配置文件简介
Solr学习笔记之4.Solr配置文件简介 摘自<Solr in Action>. 1. solr.xml – Defines one or more cores per Solr ser ...
- solr学习篇(一) solr7.4 安装配置篇
目录: solr简介 solr安装 创建core 1.solr简介 solr是企业级应用的全文检索项目,它是基于Apache Lucence搜索引擎开发出来的用于搜索的应用工程 运行环境:solr需要 ...
- solr学习笔记-linux下配置solr(转)
本文地址: http://zhoujianghai.iteye.com/blog/1540176 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Jav ...
- 04——Solr学习之项目中使用solr
借鉴博客:https://blog.csdn.net/kisscatforever/article/details/76744768 完全可以跟着他这个来,清晰明了. 一.来说说怎么使用solr这玩意 ...
- Solr学习总结(七)Solr搜索引擎的整体架构
经过前面一段时间的努力,终于把我所知道的关于solr 的内容都总结完了.前面讲到了solr 的安装配置,web管理后台的使用,solr 的查询参数和查询语法,还说到了solr的客户端 solrnet ...
- LinQ实战学习笔记(四) LINQ to Object, 常用查询操作符
这一篇介绍了下面的内容: 查询object数组 查询强类型数组 查询泛型字典 查询字符串 SelectMany 索引 Distinct操作符 排序 嵌套查询 分组 组连接 内连接 左外连接 交叉连接 ...
- solr学习篇(三) solr7.4 连接MySQL数据库
目录 导入相关jar包 配置连接信息 将数据库导入到solr中 验证是否成功 创建一个Core,创建Core的方法之前已经很详细的讲解过了,如果还是不清楚请参考 solr7.4 安装配置篇: 1.导入 ...
随机推荐
- select 源码分析
## select(2),同步的 I/O 复用 直接看 epoll 的源码把自己绕晕了,先整个简单点的下手. - [使用](#usage) - [源码分析](#src_analysis) ### se ...
- WordPress后台地址路径修改方法
用过WordPress后台的,其实都知道http://域名目录/wp-login.php就是登录地址,如果这时候使用暴力破解,很可能破解密码(这就有些想象力了),下面芝麻带你看看如何自定义美观的地址. ...
- JDBC的批处理学习rewriteBatchedStatements=true
如果在不添加批处理指令的情况下,mysql默认是不使用批处理操作,如果在url尾部添加rewriteBatchedStatements=true 可以使当前连接 使用批处理操作 创建数据库表结构 cr ...
- java基础面试集结
1.hashMap实现原理及相关问题 :https://blog.csdn.net/h1130189083/article/details/78303865
- python beautiful soup
官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ 使用前需要先安装模块,并安装解析器 pip install beautif ...
- mui中判断是点击还是滑动
判断和滑动是两种触发方式 滑动分为四种,上下左右(swipeup,swipedown,swipeleft,swiperight) 点击分为两种,点击和双击,一般用单机(tap) 根据自己不同的需求进行 ...
- MongoDB 学习笔记之 游标
游标: 游标是查询的接口,可以逐条读取. var mycursor = db.bar.find(); mycursor.hasNext(); mycursor.next(); 示例: var mycu ...
- C语言I博客作业03
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/8717 我在这个课程的目 ...
- .NetCore WebApi —— Swagger版本控制
目录: .NetCore WebApi——Swagger简单配置 .NetCore WebApi——基于JWT的简单身份认证与授权(Swagger) .NetCore WebApi —— Swagge ...
- uniapp 用户拒绝授权再次调起授权-语音识别、微信地址、附近地址
小程序重构,采用 uniapp 框架.记录一下踩过的坑.关于用户拒绝再次调起授权,及如何识别语音识别.微信地址.附近地址的处理. 语音识别 组件 语音识别,小程序只有录音功能,若要识别录音文件,常规做 ...