导入相关的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. idea创建文件类型失败(xml之类的失效

    https://blog.csdn.net/sutongxuevip/article/details/72832754

  2. caffemodel的读取与修改

    直接撸代码~ import caffe import numpy as np caffe.set_mode_cpu() net = caffe.Net('myprototxt.prototxt', ' ...

  3. 【转载】探寻C++最快的读取文件的方案

    原文地址:https://www.byvoid.com/blog/fast-readfile/ 在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式.相信几乎所有的C++学习者 ...

  4. Android 编译系统的组成

    Android 和 Linux 的编译系统都是通过 Makefile 工具来组织编译源代码的. Makefile 工具用来解释和执行 Makefile 文件,在 Makefile 文件里定义好工程源代 ...

  5. Management

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. TCP/IP网络编程系列之二(初级)

    套接字类型与协议设置 我们先了解一下创建套接字的那个函数 int socket(int domain,int type,int protocol);成功时返回文件描述符,失败时返回-1.其中,doma ...

  7. Java的八种基本数据类型及其包装类

    Java有八种基本数据类型,所谓基本类型就是说存储时仅存在栈中,那么与之相对就是引用类型,引用类型既存在栈里又存在堆里,栈内存放堆内地址. 八种基本类型分别为byte short int long f ...

  8. Protobuff java 文件生成命令

    protoc.exe -I./proto文件目录 --java_out=java文件目录 proto文件基于文件目录的全路径 protoc.exe -I./protoFolder --java_out ...

  9. python实战——文本挖掘+xgboost预测+数据处理+准确度计算整合版

    if __name__=="__main__": '''============================先导入数据============================= ...

  10. jredis 客户端 使用

    redis学习及实践3---Jedis.JedisPool.Jedis分布式实例介绍 Java中使用Jedis操作Redis Redis客户端:Jedis