导入相关的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. Nomad 了解

    Introduction to Nomad Welcome to the intro guide to Nomad! This guide is the best place to start wit ...

  2. jquery json string 转换 合并

    Jquery 1.9.1 var BODY = { "recipients": { "values": [] }, "subject": ' ...

  3. (转)Inno Setup入门(十六)——Inno Setup类参考(2)

    本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250967 这里将接着在前面的基础上介绍如何在自定义页面上添加按钮 ...

  4. Django 的路由分配系统

    Django的路由系统 URL配置(URL.conf)就像Django所支撑网站的目录,它的本质是URL与要为该URL调用的视图函数之间的映射表. 我们就是以这种方式告诉Django,遇到哪个URL的 ...

  5. 第十二章 Ganglia监控Hadoop及Hbase集群性能(安装配置)

    1 Ganglia简介 Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点.每台计算机都运行一个收集和发送度量数据(如处理器速度.内存使用量等)的名为 gm ...

  6. 【学习笔记】FFT

    1.内容 由于noble_太懒 不想写了 非常好的博客: https://www.cnblogs.com/rvalue/p/7351400.html http://www.cnblogs.com/ca ...

  7. 我编辑的JAVA日历程序

    class calendar { public static void main(String[]args) { int yearIn ; yearIn = Integer.parseInt(args ...

  8. oracle建立用户与授权(转载)

    创建表空间及用户: create tablespace 表空间名 datafile 'd:/seal.dbf' size 10M autoextend on;create user username ...

  9. Asp.net 的cookie问题

    写代码的发现的小问题 如果写入cookie的时候指定了domin域名 那么删除的时候必须也指定domin域名才行,即使你先读取了这个已经存在的cookie,但是还是要指定domin才能删除 /// & ...

  10. solr解决访问安全

    Tomcat7,solr3.6,mmseg1.8 1:环境的搭建 1:解压tomcat,solr,mmseg4j 2:复制dist文件夹下apache-solr.war到tomcat的webapp文件 ...