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.导入 ...
随机推荐
- WordPress 文章目录插件 Easy Table of Contents 配置教程
今天介绍一款目录插件,本站已经使用一段时间,感觉不错,实现效果可以看文章页右侧边栏有目录,点击目录内容会快速定位.推荐给大家. 一.安装Easy Table of Contents 插件主页搜索Eas ...
- Ubuntu18.04 显卡驱动+Cuda安装踩坑记录 以及Ubuntu虚拟内存的添加
前几天买了张亮机卡,终于把主显卡成功直连到Unraid OS的虚拟机上了.然后就开始安装ubuntu系统开始配置环境,遇到了不少坑,特此记录. gcc版本问题 在安装显卡驱动的时候,不要修改gcc版本 ...
- 【ADO.NET基础-Regidter】简单的账户注册界面和源代码(可用于简单面试基础学习用)
在阅读时如有问题或者建议,欢迎指出和提问,我也是初学者......... 前台代码: <!DOCTYPE html> <html xmlns="http://www.w3. ...
- jQuery常用方法(五)-jQuery CSS
JQuery CSS 方法说明 css( name ) 访问第一个匹配元素的样式属性. css( properties ) 把一个"名/值对"对象设置为所有匹配元素的样式属性. $ ...
- HBase学习与实践
Photo by bealach verse on Unsplash 参考书籍:<HBase 权威指南> -- Lars George著. 文章为个人从零开始学习记录,如有错误,还请不吝赐 ...
- Flutter中TabBarView切换状态保存
TabBarView 类似于Android中的viewPager,但是默认是没有实现切换分页状态保存的.估计是出于节约内存的原因吧. 发现这个问题的时候,搜索了一下全网.大致就两种解决方案,1是修改源 ...
- Android 调用 WebService
1.WebService简介 PS:如果看完上面简介还不是很清楚的话,那么就算了,之前公司就用C#搭的一个WebService! 本节我们并不讨论如何去搭建一个WebService,我们仅仅知道如何去 ...
- flask 源码解析:上下文(一)
文章出处 https://www.cnblogs.com/jackchengcc/archive/2018/11/29/10025949.html 一:什么是上下文 每一段程序都有很多外部变量.只有 ...
- 如何去除CFormView的Scrollbar
第一种方法: 重载 OnSize(UINT nType, int cx, int cy) 在CFormView::OnSize(nType, cx, cy)下面添加一句 ShowScrollBar(S ...
- 第10项:重写equals时请遵守通用约定
重写equals方法看起来似乎很简单,但是有许多重写方式会导致错误,而且后果非常严重.最容易避免这类问题的办法就是不覆盖equals方法,在这种情况下,类的每个实例都只能与它自身相等.如果满足了以 ...