Solr7.x学习(7)-JAVA操作
maven依赖
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>7.7.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
Person类
package com.zhi.test; import java.io.Serializable; import org.apache.solr.client.solrj.beans.Field; /**
* 人员信息
*
* @author zhi
* @time 2016年12月22日09:55:42
*
*/
@SuppressWarnings("serial")
public class Person implements Serializable {
/**
* 主键
*/
@Field
private String id;
/**
* 人员名称
*/
@Field
private String name;
/**
* 地址
*/
@Field
private String addr;
/**
* 年龄
*/
@Field
private Integer age; public Person() {
super();
} public Person(String id, String name, String addr, Integer age) {
super();
this.id = id;
this.name = name;
this.addr = addr;
this.age = age;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAddr() {
return addr;
} public void setAddr(String addr) {
this.addr = addr;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
}
}
Datas类
package com.zhi.test; import java.util.ArrayList;
import java.util.List; public class Datas {
public static List<Person> getPersonData() throws Exception {
List<Person> list = new ArrayList<Person>();
list.add(new Person("01", "张三丰", "湖北省浠水县天虹大厦3楼", 100));
list.add(new Person("02", "张无忌", "湖北省武汉市中南路300号", 24));
list.add(new Person("03", "郭靖", "中华人民共和国", 36));
list.add(new Person("04", "黄蓉", "中国浙江", 17));
list.add(new Person("05", "杨过", "中国浙江杭州", 25));
list.add(new Person("06", "周伯通", "中国浙江杭州", 66));
list.add(new Person("07", "黄老邪", "中国浙江杭州", 54));
list.add(new Person("08", "欧阳锋", "湖北省黄石市杭州路900号", 52));
list.add(new Person("09", "木婉清", "湖北省武汉市陆军医院8楼", 19));
list.add(new Person("10", "萧峰", "湖北省武汉汉口解决大道33号", 31));
list.add(new Person("11", "扫地僧", "湖北省武汉市江夏大道99号", 99));
list.add(new Person("12", "丁春秋", "张家界", 43)); return list;
}
}
SolrTest类
package com.zhi.test; import java.util.List; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; /**
* Solr客户端测试,需提前建好core
*
* @author zhi
* @since 2019年9月29日09:02:17
*
*/
public class SolrTest {
private Logger logger = LogManager.getLogger(this.getClass());
private SolrClient solrClient; @Before
public void init() {
solrClient = new HttpSolrClient.Builder("http://192.168.114.141:8983/solr/").build();
} @After
public void destroy() {
try {
solrClient.close();
} catch (Exception e) {
logger.error("关闭SolrClient出错", e);
}
} /**
* 添加一个Document,core中如果定义field,会自动创建对应的field
*/
@Test
public void addDoc() {
try {
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "1");
document.addField("name", "研发中心");
document.addField("remark", "苦逼集中营"); UpdateResponse response = solrClient.add("dept", document);
solrClient.commit("dept"); // 提交,让保存生效 logger.info("保存成功,返回的信息:{}", response.toString());
} catch (Exception e) {
logger.error("报错出错", e);
}
} /**
* 查询Document列表
*/
@Test
public void queryDoc() {
try {
SolrQuery query = new SolrQuery();
query.set("q", "name:研发"); QueryResponse response = solrClient.query("dept", query);
SolrDocumentList list = response.getResults();
logger.info("查询到的数据长度:{}", list.size());
for (SolrDocument doc : list) {
logger.info("id={},name={},remark={}", doc.get("id"), doc.get("name"), doc.get("remark"));
}
} catch (Exception e) {
logger.error("查询出错", e);
}
} /**
* 根据ID删除Document
*/
@Test
public void delDocById() {
try {
UpdateResponse response = solrClient.deleteById("dept", "1");
solrClient.commit("dept"); // 提交,让删除生效
logger.info("删除成功,返回信息:{}", response.toString());
} catch (Exception e) {
logger.error("删除出错", e);
}
} /**
* 添加对象列表,Bean对象至少有一个字段加上@Field注解。
* <li>有注解的会自动匹配core中的field(没有会自动生成field)
* <li>没注解的不会生成field,也不会保存(即使core中定义了该名称的field)
*/
@Test
public void addBeans() {
try {
UpdateResponse response = solrClient.addBeans("person", Datas.getPersonData());
solrClient.commit("person"); // 提交,让保存生效
logger.info("保存成功,返回消息:{}", response.toString());
} catch (Exception e) {
logger.error("保存出错", e);
}
} /**
* 查询Bean列表,分页查询,按id排序且只返回id、code、name3个字段
*/
@Test
public void queryBeans1() {
try {
SolrQuery query = new SolrQuery();
query.set("q", "*:*"); // 设置分页参数
query.setStart(0);
query.setRows(5); query.setFields("id", "name", "addr"); // 设置返回字段
query.setSort("id", SolrQuery.ORDER.asc); // 排序 QueryResponse response = solrClient.query("person", query);
List<Person> list = response.getBeans(Person.class);
logger.info("查询到的数据长度:{}", list.size());
for (Person person : list) {
logger.info("id={},name={},addr={}", person.getId(), person.getName(), person.getAddr());
}
} catch (Exception e) {
logger.error("查询出错", e);
}
} /**
* 查询Bean列表,addr包含 武汉,age范围15到25
*/
@Test
public void queryBeans2() {
try {
SolrQuery query = new SolrQuery();
query.set("q", "*:*"); query.addFilterQuery("age:[15 TO 25]"); // 年龄范围过滤
query.addFilterQuery("addr:武汉"); // 地址相似匹配 QueryResponse response = solrClient.query("person", query);
List<Person> list = response.getBeans(Person.class);
logger.info("查询到的数据长度:{}", list.size());
for (Person person : list) {
logger.info("id={},name={},addr={},age={}", person.getId(), person.getName(), person.getAddr(),
person.getAge());
}
} catch (Exception e) {
logger.error("查询出错", e);
}
} /**
* 查询Bean列表,关键字AND、OR必须大写。与queryBeans2结果一致,只是查询时机不一样
*/
@Test
public void queryBeans3() {
try {
SolrQuery query = new SolrQuery();
query.set("q", "age:[15 TO 25] AND addr:武汉"); QueryResponse response = solrClient.query("person", query);
List<Person> list = response.getBeans(Person.class);
logger.info("查询到的数据长度:{}", list.size());
for (Person person : list) {
logger.info("id={},name={},addr={}", person.getId(), person.getName(), person.getAddr());
}
} catch (Exception e) {
logger.error("查询出错", e);
}
}
}
Solr7.x学习(7)-JAVA操作的更多相关文章
- Hbase深入学习(六) Java操作HBase
Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...
- Elasticsearch学习之Java操作1
1. Elasticsearch为Java用户提供了两种内置客户端 1.1 节点客户端(node client): 节点客户端以无数据节点(none data node)身份加入集群,换言之,它自己不 ...
- hadoop学习(五)----HDFS的java操作
前面我们基本学习了HDFS的原理,hadoop环境的搭建,下面开始正式的实践,语言以java为主.这一节来看一下HDFS的java操作. 1 环境准备 上一篇说了windows下搭建hadoop环境, ...
- Es学习第十一课,使用java操作elasticsearch
前面十节课我们已经把ES的基本概念和使用讲的差不多了,现在我们就用基于java来实际开发一个操作ES的小项目,带大家来一起练练手. 1.我们用IDEA创建一个maven项目 项目结构如上图所示,然后我 ...
- java操作redis学习(一):安装及连接
文章参考自:http://www.cnblogs.com/edisonfeng/p/3571870.html,在此基础上进行了修改. 一.下载安装Redis redis官网显示暂时不支持Windows ...
- hadoop学习(三)HDFS常用命令以及java操作HDFS
一.HDFS的常用命令 1.查看根目录下的信息:./hadoop dfs -ls 2.查看根目录下的in目录中的内容:./hadoop dfs -ls in或者./hadoop dfs -ls ./i ...
- 很值得学习的java 画图板源码
很值得学习的java 画图板源码下载地址:http://download.csdn.net/source/2371150 package minidrawpad; import java.awt.*; ...
- Mongodb快速入门之使用Java操作Mongodb
[IT168 专稿]在上一篇文章中,我们学习了Mongodb的安装和初步使用,在本文中,将学习如何使用Java去编程实现对Mongodb的操作. HelloWorld程序 学习任何程序的第一步,都是编 ...
- Mongodb入门并使用java操作Mongodb
转载请注意出处:http://blog.csdn.net/zcm101 最近在学习NoSql,先从Mongodb入手,把最近学习的总结下. Mongodb下载安装 Mongodb的下载安装就不详细说了 ...
- 学习笔记——Java类和对象
今天学习了Java的类和对象的相关知识,由于Java面向对象的编程的思想和C++几乎一样,所以需要更多的关注Java的一些不同之处. 1.类 1.1 在类这一块,除了基本的成员变量,成员方法,构造函数 ...
随机推荐
- Java自学-I/O 缓存流
Java 缓存流BufferedReader,PrintWriter 以介质是硬盘为例,字节流和字符流的弊端: 在每一次读写的时候,都会访问硬盘. 如果读写的频率比较高的时候,其性能表现不佳. 为了解 ...
- Jupyter Notebook 打开方法
直接在文件资源管理器的地址栏中输入Jupyter notebook ,即可打开当前目录下的Jupyter.比之前右键打开power shell更方便
- Redis安装和基本使用
目录 Redis安装和基本使用 安装 配置 启动服务端 启动客户端 Redis键(key) 与键相关的基本命令 Redis字符串 常用字符串命令: Redis哈希 常用Hash命令 Redis 列表( ...
- 电商系统中SPU、SKU的区别
SPU = Standard Product Unit(标准产品单位) SPU是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该集合描述了一个产品的特性.SPU多见于后台商品的管理. ...
- 微信小程序开发--flex详细解读(2)
一.align-items和其参数 stretch / baseline 注:sretch只有在交叉轴没有设置固定长度的情况下才有作用 ...
- 如何修改被readonly修饰的属性
结论: 1.用KVC改变只读属性的值: 2.若禁止KVC方式修改只读属性的值,可在对应类重写类方法 // 该方法默认返回YES. 即在不存在满足条件的存取方法时,允许直接访问属性对应的实例变量+ (B ...
- Markdown随笔
Markdown随笔 这两天兴致来了,想尝试一下使用 Markdown. 写这篇博客时我用的是: MarkdownPad 2 关于 MarkdownPad 2 的安装破解网上有很多教程了,这里我就不赘 ...
- Linux Firewalld 基础实例
本次是一个Firewalld的基础操作实例,利用Firewalld图形操作界面进行访问控制操作. 实验拓扑 需求分析 首先拓扑涉及到两个区域,这里使用work和public区域,分别做相应的规则. 1 ...
- Python的WSGI(Web Server Gateway Interface)服务器
Python的WSGI(Web Server Gateway Interface)服务器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- 显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么?
在使用深度学习框架的过程中一定会经常碰到这些东西,虽然anaconda有时会帮助我们自动地解决这些设置,但是有些特殊的库却还是需要我们手动配置环境,但是我对标题上的这些名词其实并不十分清楚,所以老是被 ...