solr的客户端操作:使用solrj进行curd操作
导入相关的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操作的更多相关文章
- Solr JAVA客户端SolrJ 4.9使用示例教程
http://my.oschina.net/cloudcoder/blog/305024 简介 SolrJ是操作Solr的JAVA客户端,它提供了增加.修改.删除.查询Solr索引的JAVA接口.So ...
- ASP.NET Cookie概念、CURD操作、原理、实际运用
会话就WEB开发来说,一个会话就是你通过浏览器与服务器之间的一次通话,只不过这种通话是以用浏览器浏览的方式来实现的. 就会话的应用来说,一般会话是用来识别用户的,比如你可以使用会话级变量记录当前用户已 ...
- MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)
回到目录 我们上一讲中介绍了大叔封装的Mongo仓储,其中介绍了几个不错的curd操作,而对于按需更新内部子对象,它是有条件的,即你的子对象不能为null,也就是说,我们在建立主对象时,应该为子对象赋 ...
- Laravel框架数据库CURD操作、连贯操作使用方法
Laravel框架数据库CURD操作.连贯如何来操作了这个操作性是非常的方便简单了我们在这里来为各位介绍一篇相关的教程,具体的细节步骤如下文介绍. Laravel是一套简洁.优雅的PHP Web开 ...
- php对xml文件进行CURD操作
XML是一种数据存储.交换.表达的标准: - 存储:优势在于半结构化,可以自定义schema,相比关系型二维表,不用遵循第一范式(可以有嵌套关系): - 交换:可以通过schema实现异构数据集成: ...
- MongoDB的安装及CURD操作
MongoDB的下载地址:http://www.mongodb.org/downloads MongoDB有32bit和64bit两个版本,32bit只能存放2GB数据.我们选择64bit版进行下载. ...
- LINQ-to-SQL那点事~利用反射在LINQ-to-SQL环境中实现Ado.net的CURD操作
回到目录 对于linq to sql提供的CURD操作,给我们的感觉就是简单,容易使用,更加面向对象,不用拼SQL语句了,这些好处都表示在处理单条实体或者集合长度小的情况下,如果有一个1000条的集合 ...
- Laravel框架数据库CURD操作、连贯操作
这篇文章主要介绍了Laravel框架数据库CURD操作.连贯操作.链式操作总结,本文包含大量数据库操作常用方法,需要的朋友可以参考下 一.Selects 检索表中的所有行 $users = DB::t ...
- 一个简单的ORM制作(CURD操作类)
SQL执行类 CURD操作类 其他酱油类 此篇是为上篇文章填坑的,不知道上篇砸过来的砖头够不够,不够的话请大家继续砸. CURD操作类负责将用户提供的条件转换为SQL语句,并提供给IHelper执行, ...
随机推荐
- MSDN中回调函数的讲解及其C#例子:用委托实现回调函数
转自:http://blog.csdn.net/sizheng0320/article/details/1615777 ms-help://MS.MSDNQTR.2003FEB.2052/cpguid ...
- pymongo和mongodbengine之间的区别
pymongo是一个mongo driver,可以用来连接数据库以及对数据库进行操作,但是是用mongo自己的用来操作数据库的语句进行操作数据库,而mongodbengine就像是sqlalchemy ...
- 一篇文章学LINQ(原创)
本篇文章主要介绍linq的基本用法,采用sql和linq比较的方式由浅入深进行学习, 注意:此文章是根据真实表来进行案例说明,表结构如下: 表1: Student(学生表) ...
- PhpStorm 2017.3 版本在 Mac 系统 macOS High Sierra 版本 10.13.3 中运行很卡顿
最近升级了系统,发现PHPStorm 运行一会儿就卡顿起来了,按网上的方法加大内存配置也是没效果: 运行一会儿照样卡顿,接着一会儿就要内存溢出了挂掉了: 想着最近只有升级过操作系统,并没有升级JDK等 ...
- Unit06: Spring对JDBC的 整合支持 、 Spring+JDBC Template、Spring异常处理
Unit06: Spring对JDBC的 整合支持 . Spring+JDBC Template .Spring异常处理 1. springmvc提供的异常处理机制 我们可以将异常抛给spring框架 ...
- combiner中使用状态模式
mapreduce中的combine过程 hadoop的map过程执行完成后,每一个map都可能会产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,减少在map和reduce ...
- 10 删除topic中的数据
1 打开 server.properties2 添加一条: delete.topic.enable=true 3 执行命令: bin/kafka-topics.sh --delete ...
- Linux USB 摄像头驱动
在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 USB 接口的摄像头.这一章主要是介绍 USB 摄像头的设备驱动程序.在我们印象中,驱动程序都是一个萝卜一个坑, ...
- Java中RMI远程调用demo
Java远程方法调用,即Java RMI(Java Remote Method Invocation),一种用于实现远程过程调用的应用程序编程接口.它使客户机上运行的程序可以调用远程服务器上的对象.远 ...
- Android 应用获取Jenkins编译的版本号
Android很多应用的版本号最后都带了编译的版本号.比如说V1.0.0.125,后边的125就通常使用每次编译之后build history的号码,它是逐次增加,这样就可以区分每个细分的编译版本号, ...