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.导入 ...
随机推荐
- Activiti(1) - TaskRuntime API 入门
目录 TaskRuntime API pom.xml 注册TaskRuntime实例 角色与分组 任务事件监听器 DemoApplication 源码 Activiti 是一个自动化工作流框架.它能帮 ...
- 使用Xhell连接Docker虚拟机
平时我们可以使用Xhell来连接Docker虚拟机. 1.首先,我们来用VirtualBox管理器来看一下default虚拟机的网络配置: 2.新建Xshell会话: a.我们可以看到ssh的主机IP ...
- mydumper 介绍及使用
1 Mydumper 介绍 Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具. Mydumper主要特性: 轻量级C语言写的 多线程备份,备份后会生成多个备份文件 事务 ...
- node 利用命令行交互生成相应模板
目录 readline 实现 使用process实现 使用 inquirer 调用的生成模板方法 (generator 方法) 创建时间:2019-10-15 测试环境:win10 node-v10. ...
- Kafka常用运维操作
创建主题kafka-topics.sh --zookeeper localhost:2181 --create --topic my-topic --replication-factor 3 --pa ...
- KafkaStream-高级别API
使用Streams DSL构建一个处理器拓扑,开发者可以使用KStreamBuilder类,它是TopologyBuilder的扩展.在Kafka源码的streams/examples包中有一个简单的 ...
- python编程基础之十八
字符串的查找和替换常用函数: str.count(sub,start = 0,end = len(str)) 计算sub 在str中出现的次数,[start,end)寻找区间 str.find(str ...
- Cohen-Sutherland算法
Cohen-Sutherland算法 本算法又称为编码裁剪算法,算法的基本思想是对每 条直线段分三种情况处理: (1)若点p1和p 2完全在裁剪窗口内 “简取”之 (2)若点p1(x1,y1)和p2( ...
- 支撑微博亿级社交平台,小白也能玩转Redis集群(原理篇)
Redis作为一款性能优异的内存数据库,支撑着微博亿级社交平台,也成为很多互联网公司的标配.这里将以Redis Cluster集群为核心,基于最新的Redis5版本,从原理再到实战,玩转Redis集群 ...
- Flask的路由解读以及其配置
from flask import Flask app =Flask(__name__) 一.配置 配置一共有四中方式 方法一: 只能设置以下两种属性 app.debug=True app.secre ...