solr java demo 基础入门
<!--solr的maven依赖-->
<dependencies>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
</dependencies>
//pojo package com.j1.solrj.pojo; import org.apache.solr.client.solrj.beans.Field; public class Foo { @Field("id")
private String id; @Field("title")
private String title; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} @Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Foo [id=");
builder.append(id);
builder.append(", title=");
builder.append(title);
builder.append("]");
return builder.toString();
} }
//Service package com.j1.solrj.service; import java.util.ArrayList;
import java.util.List;
import java.util.Map; import org.apache.commons.lang3.StringUtils;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse; import cn.itcast.solrj.pojo.Foo; public class SolrjService { // 定义http的solr服务
private HttpSolrServer httpSolrServer; public SolrjService(HttpSolrServer httpSolrServer) {
this.httpSolrServer = httpSolrServer;
} /**
* 新增数据到solr服务
*
* @param foo
* @throws Exception
*/
public void add(Foo foo) throws Exception {
this.httpSolrServer.addBean(foo); //添加数据到solr服务器
this.httpSolrServer.commit(); //提交
} public void delete(List<String> ids) throws Exception {
this.httpSolrServer.deleteById(ids);
this.httpSolrServer.commit(); //提交
} public List<Foo> search(String keywords, Integer page, Integer rows) throws Exception {
List<Foo> foos=new ArrayList <Foo> ();
SolrQuery solrQuery = new SolrQuery(); //构造搜索条件
solrQuery.setQuery("title:" + keywords); //搜索关键词
// 设置分页 start=0就是从0开始,,rows=5当前返回5条记录,第二页就是变化start这个值为5就可以了。
solrQuery.setStart((Math.max(page, 1) - 1) * rows);
solrQuery.setRows(rows); //是否需要高亮
boolean isHighlighting = !StringUtils.equals("*", keywords) && StringUtils.isNotEmpty(keywords); if (isHighlighting) {
// 设置高亮
solrQuery.setHighlight(true); // 开启高亮组件
solrQuery.addHighlightField("title");// 高亮字段
solrQuery.setHighlightSimplePre("<em>");// 标记,高亮关键字前缀
solrQuery.setHighlightSimplePost("</em>");// 后缀
} // 执行查询
QueryResponse queryResponse = this.httpSolrServer.query(solrQuery);
try{
foos = queryResponse.getBeans(Foo.class);
}catch(Exception e){
e.printStackTrace();
} if (isHighlighting) {
// 将高亮的标题数据写回到数据对象中
Map<String, Map<String, List<String>>> map = queryResponse.getHighlighting();
for (Map.Entry<String, Map<String, List<String>>> highlighting : map.entrySet()) {
for (Foo foo : foos) {
if (!highlighting.getKey().equals(foo.getId().toString())) {
continue;
}
foo.setTitle(StringUtils.join(highlighting.getValue().get("title"), ""));
break;
}
}
} return foos;
} }
//test 测试 package com.j1.solrj.service; import java.io.IOException;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List; import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.junit.Before;
import org.junit.Test; import cn.itcast.solrj.pojo.Foo; public class SolrjServiceTest { private SolrjService solrjService; private HttpSolrServer httpSolrServer; @Before
public void setUp() throws Exception {
// 在url中指定core名称:taotao
// String url = "http://solr.taotao.com/taotao";
String url = "http://solr.taotao.com/taotao";
HttpSolrServer httpSolrServer = new HttpSolrServer(url); //定义solr的server
httpSolrServer.setParser(new XMLResponseParser()); // 设置响应解析器
httpSolrServer.setMaxRetries(1); // 设置重试次数,推荐设置为1
httpSolrServer.setConnectionTimeout(500); // 建立连接的最长时间 this.httpSolrServer = httpSolrServer;
solrjService = new SolrjService(httpSolrServer);
} @Test
public void testAdd() throws Exception {
Foo foo = new Foo();
foo.setId("1425954987819");
foo.setTitle("new - 轻量级Java EE企业应用实战(第3版):Struts2+Spring3+Hibernate整合开发(附CD光盘)");
try{
this.solrjService.add(foo);
}catch(Exception e){
e.printStackTrace();
} } @Test
public void testDelete() throws Exception {
this.solrjService.delete(Arrays.asList("1425954987818"));
} @Test
public void testSearch() throws Exception {
List<Foo> foos = this.solrjService.search("new", 1, 10);
for (Foo foo : foos) {
System.out.println(foo);
}
} @Test
public void testDeleteByQuery() throws Exception{
httpSolrServer.deleteByQuery("title:轻量级Java");
httpSolrServer.commit();
} }
测试结果:
Foo [id=1474391928, title=ip6-测试-<em>new</em>2]
Foo [id=1473655354, title=<em>new</em>19 - 小米 红米Note 8G内存移动4G合约增强版 不含合约计划 白色 移动4G]
Foo [id=1473655354, title=new19 - 小米 红米Note 8G内存移动4G合约增强版 不含合约计划 白色 移动4G]
Foo [id=1425955126820, title=<em>new</em> - 轻量级Java EE企业应用实战(第3版):Struts2+Spring3+Hibernate整合开发(附CD光盘)]
solr java demo 基础入门的更多相关文章
- 【JAVA零基础入门系列】Day2 Java集成开发环境IDEA
开发环境搭建好之后,还需要一个集成开发环境也就是IDE来进行编程.这里推荐的IDE是IDEA,那个老掉牙的Eclipse还是先放一边吧,(手动滑稽). IDEA的下载地址:http://www.jet ...
- 【JAVA零基础入门系列】Day4 变量与常量
这一篇主要讲解Java中的变量,什么是变量,变量的作用以及如何声明,使用变量. 那么什么是变量?对于初学者而言,可以将变量理解为盒子,这些盒子可以用来存放数据,不同类型的数据需要放在对应类型的盒子里. ...
- 【JAVA零基础入门系列】Day5 Java中的运算符
运算符,顾名思义就是用于运算的符号,比如最简单的+-*/,这些运算符可以用来进行数学运算,举个最简单的栗子: 已知长方形的长为3cm,高为4cm,求长方形的面积. 好,我们先新建一个项目,命名为Rec ...
- 【JAVA零基础入门系列】Day6 Java字符串
字符串,是我们最常用的类型,每个用双引号来表示的串都是一个字符串.Java中的字符串是一个预定义的类,跟C++ 一样叫String,而不是Char数组.至于什么叫做类,暂时不做过多介绍,在之后的篇章中 ...
- 【JAVA零基础入门系列】Day8 Java的控制流程
什么是控制流程?简单来说就是控制程序运行逻辑的,因为程序一般而言不会直接一步运行到底,而是需要加上一些判断,一些循环等等.举个栗子,就好比你准备出门买个苹果,把这个过程当成程序的话,可能需要先判断一下 ...
- 【JAVA零基础入门系列】Day9 Java中的那个大数值
什么是大数值?用脚趾头想也知道,当然是"大"的数值(233).Java中有两个用于表示大数值的类,BigInteger和BigDecimal,那到底能表示多大的数值呢?理论上,可以 ...
- 【JAVA零基础入门系列】Day10 Java中的数组
什么是数组?顾名思义,就是数据的组合,把一些相同类型的数放到一组里去. 那为什么要用数组呢?比如需要统计全班同学的成绩的时候,如果给班上50个同学的成绩信息都命名一个变量进行存储,显然不方便,而且在做 ...
- 【JAVA零基础入门系列】Day11 Java中的类和对象
今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...
- 【JAVA零基础入门系列】Day12 Java类的简单应用
俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...
随机推荐
- git使用情景2:commit之后,想撤销commit
================实际操作============================== 提交到git上撤回 git reset head^1 提交到本地 撤回 git reset --s ...
- Python之使用PIL实现cv2
有时候使用cv2需要安装opencv,但是opencv安装比较麻烦,因为需要编译过程. 所以,我们可以使用PIL对cv2的一些常用接口进行复现. 这里我们实现了cv2的imread(), imwrit ...
- (笔记)Mysql命令select:当前选择(连接)的数据库
select命令表示当前选择(连接)的数据库. select命令格式:mysql> select database(); MySQL中SELECT命令类似于其他编程语言里的print或者writ ...
- 计算机网络——网络层
一.虚拟线路与数据报线路 1. 在网络层提供有连接的计算机网络为虚电路网络: 如因特网:它需要VC(虚拟电路)号,用于建立虚拟电路的报文称为信令报文,相关的协议称为信令协议: 无连接的网络为数据报网络 ...
- PHP + Smarty + html5 构建Wap应用
一 简介 Smarty是一个PHP编写的模板引擎(template engine),主要用于构建web应用程序的表示层.Smarty的主页是http://www.smarty.net/down ...
- Java是一门面向对象编程语言的理解
Java是一门面向对象编程语言. 不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. Java语言作为静态面向对象编程语言的 ...
- (转)live555学习笔记7-RTP打包与发送
七 RTP打包与发送 rtp传送开始于函数:MediaSink::startPlaying().想想也有道理,应是sink跟source要数据,所以从sink上调用startplaying(嘿嘿,相当 ...
- vs2013(vs2015) 打开vs2010 找不到此项目类型所基于的应用程序 MVC2 升级 MVC5 不能加载Web项目
Upgrading an ASP.NET MVC 2 Project to ASP.NET MVC 3 Tools Update ASP.NET MVC 3 can be installed side ...
- Java 7中的TransferQueue 以及 SynchronousQueue
Java7中加入了JSR 166y规范对集合类和并发类库的改进.其中的一项是增加了接口TransferQueue和其实现类LinkedTransferQueue. TransferQueue继承了Bl ...
- php判断所在的客户端
//判断是否是手机 function is_mobile() { $agent = strtolower($_SERVER['HTTP_USER_AGENT']); $is_pc = (strpos( ...