导入相关的jar包

<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.2</version>
</dependency>
<!--日志的包, solrj执行需要一个日志包-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
<version>1.1</version>
</dependency>

增删改的操作:

package com.zy.solr;

import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; public class BaseSolr { //solrj写入一个索引
@Test
public void createIndexToSolr() throws IOException, SolrServerException {
//solrj的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
//添加document文档
SolrInputDocument document = new SolrInputDocument();
document.addField("id", 1);
document.addField("title", "solr是一个企业级的搜索应用服务器");
document.addField("content", "solr是一个独立的企业级搜索应用服务器, 用户可以通过http请求访问这个服务器, 获取或者写入对应的内容, 其底层是Lucene");
solrServer.add(document);
//提交
solrServer.commit();
} //solrj写入多个索引
@Test
public void createMultiIndexToSolr() throws IOException, SolrServerException {
//solrj的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
//添加document文档
List<SolrInputDocument> list = new ArrayList<SolrInputDocument>();
for (int i = 1; i < 6; i++) {
SolrInputDocument document = new SolrInputDocument();
document.addField("id", i);
document.addField("title", "solr是一个企业级的搜索应用服务器 " + i);
document.addField("content", "solr是一个独立的企业级搜索应用服务器, 用户可以通过http请求访问这个服务器, 获取或者写入对应的内容, 其底层是Lucene " + i);
list.add(document);
} solrServer.add(list);
//提交
solrServer.commit();
} //solrj写入一个索引(使用JavaBean方式)
@Test
public void createIndexJavaBeanToSolr() throws IOException, SolrServerException {
//solrj的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
//添加JavaBean信息
TestBean bean = new TestBean();
bean.setId("6");
bean.setName("solr");
bean.setTitle("solr title");
bean.setContent("solr content");
solrServer.addBean(bean);
//提交
solrServer.commit();
} //solrj写入多个索引(使用JavaBean方式)
@Test
public void createMultiIndexJavaBeanToSolr() throws IOException, SolrServerException {
//solrj的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
//添加JavaBean信息
List<TestBean> list = new ArrayList<TestBean>();
for (int i = 7; i < 10; i++) {
TestBean bean = new TestBean();
bean.setId(i + "");
bean.setName("solr " + i);
bean.setTitle("solr title " + i);
bean.setContent("solr content " + i);
list.add(bean);
}
solrServer.addBeans(list);
//提交
solrServer.commit();
} //solrj进行删除操作
@Test
public void deleteIndexToSolr() throws IOException, SolrServerException {
//solrj的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
//执行删除操作
//根据id删除
solrServer.deleteById("9");
//根据条件删除 条件基本格式: 字段的名称:字段的值
solrServer.deleteByQuery("content:solr content 8");
//提交
solrServer.commit();
}
}

查询操作:

    //基础查询 返回原生document
@Test
public void baseQuery() throws SolrServerException {
//创建solr的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
//执行查询操作
SolrQuery query = new SolrQuery("*:*");
QueryResponse response = solrServer.query(query);
SolrDocumentList documents = response.getResults();
for (SolrDocument document : documents) {
Object id = document.get("id");
Object name = document.get("name");
Object title = document.get("title");
Object content = document.get("content");
System.out.println(id + " " + name + " " + title + " " + content);
}
} //基础查询 返回JavaBean
@Test
public void javaBeanQuery() throws SolrServerException {
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
SolrQuery query = new SolrQuery("*:*");
QueryResponse response = solrServer.query(query);
List<TestBean> list = response.getBeans(TestBean.class);
for (TestBean bean : list) {
System.out.println(bean);
}
} //复杂查询********************************************************* //公共方法
public void baseToSolr(SolrQuery solrQuery) throws SolrServerException {
//创建solr的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
//执行查询操作
QueryResponse response = solrServer.query(solrQuery);
//返回JavaBean list
List<TestBean> list = response.getBeans(TestBean.class);
for (TestBean bean : list) {
System.out.println(bean);
}
} // 在solr中, 如果要使用模糊查询 需要使用一个符号 ~
//~ 默认最大的编辑2次
//注意: 如果搜索条件中包含了特殊符号, 需要在条件的两边添加双引号或者单引号
@Test
public void fuzzQueryToSolr() throws SolrServerException {
SolrQuery solrQuery = new SolrQuery("content:'sol~'~"); baseToSolr(solrQuery);
} //通配符查询
//?代表一个字符 *代表多个字符
@Test
public void wildCardQueryToSolr() throws SolrServerException {
SolrQuery solrQuery = new SolrQuery("content:so*"); baseToSolr(solrQuery);
} //solr范围查询: 数值范围 日期范围 文本范围(采用字典顺序)
//使用格式: [ start TO end ] 包含边界值
//建议关键字都为大写(跟查询条件的内容进行区分)
//1 2 3 4 5 6 7 8 10 11 22 33
@Test
public void rangeQueryToSolr() throws SolrServerException {
SolrQuery solrQuery = new SolrQuery("id:[1 TO 3]"); baseToSolr(solrQuery);
} //布尔查询: lucene中: MUST NOT SHOULD
// solr: AND NOT OR
@Test
public void booleanQueryToSolr() throws SolrServerException {
SolrQuery solrQuery = new SolrQuery("content:企业级 NOT name:solr"); baseToSolr(solrQuery);
} // 子表达式查询
// 格式: (条件1 [OR AND NOT] 条件2) [OR AND NOT] (条件1 [OR AND NOT] 条件2)
@Test
public void biaoDaShiQueryToSolr() throws SolrServerException {
SolrQuery solrQuery = new SolrQuery("(content:lucene OR name:solr) AND id:[1 TO 2]"); baseToSolr(solrQuery);
}

其他高级操作:(排序,分页,高亮)

    //solr排序
@Test
public void sortQueryToSolr() throws SolrServerException {
SolrQuery solrQuery = new SolrQuery("*:*");
solrQuery.setSort(new SolrQuery.SortClause("id", "desc"));
// 参数1 默认排序的字段 参数2 排序的方式
solrQuery.setSort("id", SolrQuery.ORDER.desc);
baseToSolr(solrQuery);
} //solr分页
@Test
public void limitQueryToSolr() throws SolrServerException {
int page = 3; //当前页
int pageSize = 3; //每页显示的条数
SolrQuery solrQuery = new SolrQuery("*:*"); //设置从第几条开始 每页几条
solrQuery.setStart((page - 1) * pageSize);
solrQuery.setRows(pageSize); solrQuery.setSort(new SolrQuery.SortClause("id", "desc"));
// 参数1 默认排序的字段 参数2 排序的方式
solrQuery.setSort("id", SolrQuery.ORDER.desc);
baseToSolr(solrQuery);
} //solr高亮
@Test
public void highlighterQueryToSolr() throws SolrServerException {
//1. 创建solrj的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1"); //2. 执行查询
SolrQuery solrQuery = new SolrQuery("content:solr");
//高亮参数的设置
solrQuery.setHighlight(true);//开启高亮
solrQuery.addHighlightField("content");//设置高亮的字段,支持添加多个
solrQuery.addHighlightField("title");
solrQuery.setHighlightSimplePre("<font color='red'>"); //设置高亮标签的前缀
solrQuery.setHighlightSimplePost("</font>"); //设置高亮的后缀
//solrQuery.setHighlightSnippets(1); //进行分片高亮 默认为1, 主要针对多值的情况 QueryResponse response = solrServer.query(solrQuery); //获取高亮的内容:
Map<String, Map<String, List<String>>> map = response.getHighlighting();//获取高亮的结果集
/**
* 最外层的map:
* key: 文档的id值
*
* 内层的map
* key: 高亮的字段
* 内层中list:
* 存放的就是高亮的内容,默认集合中只有一个
*
*/
for (String docId : map.keySet()) {
//System.out.println(docId);
Map<String, List<String>> listMap = map.get(docId); for (String highlighterField : listMap.keySet()) {
//System.out.println(highlighterField);
List<String> list = listMap.get(highlighterField);//获取到高亮的内容
System.out.println("集合的长度:" + list.size());
System.out.println(highlighterField + " " + list.get(0));
}
}
}

solr的客户端操作:使用solrj进行curd操作的更多相关文章

  1. Solr JAVA客户端SolrJ 4.9使用示例教程

    http://my.oschina.net/cloudcoder/blog/305024 简介 SolrJ是操作Solr的JAVA客户端,它提供了增加.修改.删除.查询Solr索引的JAVA接口.So ...

  2. ASP.NET Cookie概念、CURD操作、原理、实际运用

    会话就WEB开发来说,一个会话就是你通过浏览器与服务器之间的一次通话,只不过这种通话是以用浏览器浏览的方式来实现的. 就会话的应用来说,一般会话是用来识别用户的,比如你可以使用会话级变量记录当前用户已 ...

  3. MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)

    回到目录 我们上一讲中介绍了大叔封装的Mongo仓储,其中介绍了几个不错的curd操作,而对于按需更新内部子对象,它是有条件的,即你的子对象不能为null,也就是说,我们在建立主对象时,应该为子对象赋 ...

  4. Laravel框架数据库CURD操作、连贯操作使用方法

    Laravel框架数据库CURD操作.连贯如何来操作了这个操作性是非常的方便简单了我们在这里来为各位介绍一篇相关的教程,具体的细节步骤如下文介绍.   Laravel是一套简洁.优雅的PHP Web开 ...

  5. php对xml文件进行CURD操作

    XML是一种数据存储.交换.表达的标准: - 存储:优势在于半结构化,可以自定义schema,相比关系型二维表,不用遵循第一范式(可以有嵌套关系): - 交换:可以通过schema实现异构数据集成: ...

  6. MongoDB的安装及CURD操作

    MongoDB的下载地址:http://www.mongodb.org/downloads MongoDB有32bit和64bit两个版本,32bit只能存放2GB数据.我们选择64bit版进行下载. ...

  7. LINQ-to-SQL那点事~利用反射在LINQ-to-SQL环境中实现Ado.net的CURD操作

    回到目录 对于linq to sql提供的CURD操作,给我们的感觉就是简单,容易使用,更加面向对象,不用拼SQL语句了,这些好处都表示在处理单条实体或者集合长度小的情况下,如果有一个1000条的集合 ...

  8. Laravel框架数据库CURD操作、连贯操作

    这篇文章主要介绍了Laravel框架数据库CURD操作.连贯操作.链式操作总结,本文包含大量数据库操作常用方法,需要的朋友可以参考下 一.Selects 检索表中的所有行 $users = DB::t ...

  9. 一个简单的ORM制作(CURD操作类)

    SQL执行类 CURD操作类 其他酱油类 此篇是为上篇文章填坑的,不知道上篇砸过来的砖头够不够,不够的话请大家继续砸. CURD操作类负责将用户提供的条件转换为SQL语句,并提供给IHelper执行, ...

随机推荐

  1. parceljs 基本使用———又一个前端构建工具

    备注:      又一个新的前端构建工具 1. 安装 yarn global add parcel-bundler 2. 初始化项目 yarn init -y 3. 基本代码 a. 创建 index. ...

  2. angular的require模块的使用($requireProvider的作用)

      今天我们学习一下angular的另一个几乎被忽略的模块angular-require 先给出链接地址(git:)   https://github.com/Treri/angular-requir ...

  3. 一篇文章学LINQ(原创)

    本篇文章主要介绍linq的基本用法,采用sql和linq比较的方式由浅入深进行学习, 注意:此文章是根据真实表来进行案例说明,表结构如下:  表1:    Student(学生表)           ...

  4. 利用OsCache实现后端轮循

    轮循随处可见,最常用的是APP首页的一些促销活动,一两秒切换一张图片,让前端实现起来也不难.这里说下后端的轮循,实现原理是数组+缓存.将数组放入缓存,指定缓存失效时间,如果是在失效前从缓存中取数据,那 ...

  5. RK3288 手动设置电池电量

    参考:[RK3288][Android6.0] 调试笔记 --- 电池电量一直显示100% 系统版本:RK3288 android 5.1 (与参考的变量和宏有点区别) 设备没有电池,在进行Fota升 ...

  6. js事件篇

    javascript和html之间的交互式通过事件来实现的,事件就是文档或浏览器窗口中发生的一些特定的交互. 事件流:描述的是从页面中接收事件的顺序. 不同的是,IE和Netscape开发团队竟然提出 ...

  7. PTA 1004 Counting Leaves (30)(30 分)(dfs或者bfs)

    1004 Counting Leaves (30)(30 分) A family hierarchy is usually presented by a pedigree tree. Your job ...

  8. 多进程并发简单socket

    server---------------------这种简单实现:坏处客户端启动一个一个进程,进程多了机器要蹦#!/usr/bin/env python # encoding: utf-8  # D ...

  9. Android:ScrollView和SwipeRefreshLayout高度测量

    今天组里的同事要做一个奇葩的效果,要求在ScrollView里嵌套一个RefreshLayout.类似代码如下: <?xml version="1.0" encoding=& ...

  10. 记:cloudstack--gluster主存储上的一个文件损坏导致SSVM启动失败

    cloudstack的系统vm(ssvm不停的重建失败).- 1.cloudstack-management 的关键日志 这行 cannot read header 'mnt.......':Inva ...