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获取调用当前方法的方法名和行数
java获取调用当前方法的方法名和行数String className = Thread.currentThread().getStackTrace()[2].getClassName();//调用的 ...
- c#WinForm中TeeChart控件的注册和使用
首先要注册好TeeChart控件,注册方法参考:https://blog.csdn.net/my_clear_mind/article/details/79741020 完成注册之后,新建一个WinF ...
- C# winform中组合键奇怪不响应问题
再winform中使用ProcessCmdKey处理快捷键响应,针对单一快捷键响应没有任何问题.但是针对组合键总是无法响应,如下: protected override bool ProcessCmd ...
- Console程序下监控EFCore生成的SQL语句!
最近这两天在使用控制台程序学习EFCore,突然想看看生成的SQL语句,所以在网上找到一位大神的分享的方法! 准备工作: 1). MySqlEFCore NuGet: Pomelo.EntityF ...
- Git 版本及版本范围表示法
很多 Git 命令都使用 revision(修订版本)作为参数.根据不同的命令,有时候 revision 参 数代表一个特定的提交,有时候代表某一个提交可以追踪到的所有的父提交(比如 git log) ...
- PIE SDK矢量栅格化算法
1.算法功能简介 矢量栅格化,由矢量数据向栅格数据的转换一般比较方便.对于点.线目标,由其所在的栅格行.列数表示,对于面状目标,则需判定落人该面积内的像元.通常栅格(像元)尺寸均大于原来坐标表示的分辨 ...
- Python中的函数(高级使用)
一.将函数作为变量去使用 在Python中函数也是一种对象,是一种名为function的对象,所以可以将函数赋值给变量,类似整数.浮点数.列表.元组.字典赋值给变量. 我们编写如下程序: #codin ...
- android studio学习---模板
Android Studio还为开发人员提供多种模板选项,从而大大提升开发速度.这些模板能自动创建Activity以及必要的XML文件.大家还可以利用这些模板创建出较为基础的Android应用程序,并 ...
- SAP云平台和第三方CRM解决方案(火锅)互联
光看封面配图,这篇文章很容易被误认为在讲成都的美食之一:火锅. SAP成都研究院坐落在被联合国教科文组织授予过"美食之都"称号的成都,所在的天府软件园,半径1公里左右星罗棋布着很多 ...
- nginx之旅(第一篇):nginx下载安装、nginx启动与关闭、nginx配置文件详解、nginx默认网站
一.nginx下载安装 版本nginx 1.15.5 系统环境centos7.5(本机ip192.168.199.228) 关闭selinux 和防火墙firewall 1.下载 wget http: ...