(转)淘淘商城系列——使用solrj来测试索引库
http://blog.csdn.net/yerenyuan_pku/article/details/72892280
我们使用solrj来操作索引库,一般习惯先建一个单元测试类测试下增删改查方法是否好使,这样可以大大减少出错概率,提升开发效率。
我们的taotao-search-service工程还没有添加对solrj的依赖,因此需要先添加对solrj的依赖,在taotao-search-service工程的pom.xml文件当中添加如下依赖(之所以不用写版本号是因为在taotao-parent工程中已经统一定义好版本号了)。
<!-- solr客户端 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
</dependency>

下面我们新建一个测试类TestSolrJ,如下图所示。先行测试添加文档操作。注意:添加的字段必须是schema.xml中定义的。 
为了方便大家复制,现将测试类TestSolrJ的代码贴出。
public class TestSolrJ {
@Test
public void testSolrJAddDocument() throws Exception {
// 创建一个SolrServer对象,即HttpSolrServer对象,需要指定solr服务的url
// 如果有多个collection,则需要指定要操作哪个collection,如果只有一个,可以不指定
SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr");
// 创建一个文档对象,即SolrInputDocument对象
SolrInputDocument document = new SolrInputDocument();
// 向文档中添加域,添加域这里面有一个要求,必须有一个id域,域必须在schema.xml中定义
document.addField("id", "test001");
document.addField("item_title", "海尔空调");
document.addField("item_sell_point", "送电暖宝一个哟!");
document.addField("item_price", 10000);
document.addField("item_image", "http://www.123.ipg");
document.addField("item_category_name", "电器");
document.addField("item_desc", "这是一款最新的空调,质量好,值得您信赖!!");
// 把文档写入索引库
solrServer.add(document);
// 提交
solrServer.commit();
}
}
- 1
执行上面的方法,成功后,我们到Solr首页,点击”Execute Query”按钮,即可查询到我们刚才添加的文本。 
大家发现了没有,在查询出来的数据当中没有item_desc字段,这是因为在schema.xml文件中指定该字段不保存,如下图所示,indexed=”true”表示分词存储且可以查询,stored=”false”表示不存储内容,如果stored=”false”,那么该字段就不会随查询结果一起显示,只有当stored=”true”时才会显示。 
下面我们来测试通过ID删除文档。所以我们需要在TestSolrJ单元测试类中添加如下测试方法。
@Test
public void testSolrJDeleteDocument() throws Exception {
// 创建一个SolrServer对象,即HttpSolrServer对象,需要指定solr服务的url
SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr");
// 通过id来删除文档
solrServer.deleteById("test001");
// 提交
solrServer.commit();
}
- 1
执行上面的方法,成功后,我们再查询,发现已经没有刚才我们添加的那个文档了,如下图所示。 
下面我们再测试另外一种删除方法,由于刚才我们把仅存的一条文档删除了,现在我们再添加两条数据,如下图所示。 
现在通过搜索来删除文档,故应在TestSolrJ单元测试类中添加如下测试方法。
@Test
public void deleteDocumentByQuery() throws Exception {
// 创建一个SolrServer对象,即HttpSolrServer对象,需要指定solr服务的url
SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr");
// 通过价格来删除文档
solrServer.deleteByQuery("item_price:20000");
// 提交
solrServer.commit();
}
执行上面的方法,成功后,我们再查询,发现已经没有价格为20000的那个文档记录了,如下图所示。 
至于修改操作其实就是添加操作,ID一样的,新记录会覆盖老记录,从而达到修改的目的。
下面我们进行查询操作,故应在TestSolrJ单元测试类中添加如下测试方法。
@Test
public void queryDocument() throws Exception {
// 创建一个SolrServer对象,即HttpSolrServer对象,需要指定solr服务的url
SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr");
SolrQuery query = new SolrQuery();
query.setQuery("id:test001");
QueryResponse response = solrServer.query(query);
SolrDocumentList list = response.getResults();
for (SolrDocument document : list) {
String id = document.getFieldValue("id").toString();
String title = document.getFieldValue("item_title").toString();
System.out.println(id);
System.out.println(title);
}
}
执行上面的方法,成功后,我们可在Eclipse控制台上看到如下结果。 
- 顶
- 0
- 踩
(转)淘淘商城系列——使用solrj来测试索引库的更多相关文章
- (转)淘淘商城系列——导入商品数据到索引库——Service层
http://blog.csdn.net/yerenyuan_pku/article/details/72894187 通过上文的学习,我相信大家已经学会了如何使用Solrj来操作索引库.本文我们将把 ...
- 使用solrj操作solr索引库
(solrj)初次使用solr的开发人员总是很郁闷,不知道如何去操作solr索引库,以为只能用<五分钟solr4.5教程(搭建.运行)>中讲到的用xml文件的形式提交数据到索引库,其实没有 ...
- 使用solrj操作solr索引库,solr是lucene服务器
客户端开发 Solrj 客户端开发 Solrj Solr是搭建好的lucene服务器 当然不可能完全满足一般的业务需求 可能 要针对各种的架构和业务调整 这里就需要用到Solrj了 Solrj是Sol ...
- (转) 淘淘商城系列——使用SolrJ查询索引库
http://blog.csdn.net/yerenyuan_pku/article/details/72908538 我们有必要在工程中写查询索引库的代码前先进行必要的测试.我们先到Solr服务页面 ...
- 通过Solrj实现对索引库中数据的局部更新操作
for (UpdateIndexDTO updateIndexDTO : data) { // 局部更新 SolrInputDocument doc = new SolrInputDocument() ...
- JAVAEE——宜立方商城07:Linux上搭建Solr服务、数据库导入索引库、搜索功能的实现
1. 学习计划 1.Solr服务搭建 2.Solrj使用测试 3.把数据库中的数据导入索引库 4.搜索功能的实现 2. Solr服务搭建 2.1. Solr的环境 Solr是java开发. 需要安装j ...
- 商城06——solr索引库搭建&solr搜索功能实现&图片显示问题解决
1. 课程计划 1.搜索工程的搭建 2.linux下solr服务的搭建 3.Solrj使用测试 4.把数据库中的数据导入索引库 5.搜索功能的实现 2. 搜索工程搭建 要实现搜索功能,需要搭建 ...
- (转)淘淘商城系列——使用maven构建工程
http://blog.csdn.net/yerenyuan_pku/article/details/72669269 开发工具和环境 这里,我统一规范一下淘淘商城的开发工具和环境,如下: Eclip ...
- (转) 淘淘商城系列——CMS内容管理系统工程搭建
http://blog.csdn.net/yerenyuan_pku/article/details/72825801 淘淘商城系列——CMS内容管理系统工程搭建 上文我们一起搭建了表现层中的商城门户 ...
随机推荐
- 运行shell脚本报错 '\357\273\277': command not found 解决的方法
1,删除BOM,在vi以下运行以下的命令就可以 :set nobomb 2,原因: 所谓BOM,全称是Byte Order Mark.它是一个Unicode字符,通常出如今文本的开头,用来标识字节序( ...
- SDUST 2844-Mineral Water(数学)
Mineral Water nid=24#time" title="C.C++.go.haskell.lua.pascal Time Limit1000ms Memory Limi ...
- 华为云分布式数据库中间件DDM和开源MyCAT对比
前言 华为云分布式数据库中间件(Distributed Database Middleware)是解决数据库容量.性能瓶颈和分布式扩展问题的中间件服务,提供分库分表.读写分离.弹性扩容等能力,应对海量 ...
- redis集群状态信息维护脚本
近期在做redis相关的东西.须要把2台redis切分成16个shard. 16个主shard分布在4台128G的机器上,从shard分布在12台64G的机器上.因为机器太多,查询相关的信息不太方便. ...
- 【bzoj1269】[AHOI2006]文本编辑器editor
在bzoj上乱翻,发现了可持久化并查集,然后baidu了一下,发现一种叫rope的东西. !!!真的太爽了!!! 直接上代码,感受一下(也是蒯来的). 由于rope的底层实现,in ...
- 最大heap
1 什么是最大heap 最大heap是一棵完全二叉树.每棵子树的根比它的两棵子树上的节点都要大. 2 建堆的过程 function max_heaptify(A): for (i = n/2向下取整: ...
- .net 接收存储过程的返回值 。。。。
.net 接收存储过程的返回值 .... Posted on 2009-06-10 20:26 且行且思 阅读(...) 评论(...) 编辑 收藏 例如在向数据库添加新数据时,需要检测是否有重复 本 ...
- [Codeforces Education Round 6E] New Year Tree
[题目链接] https://codeforces.com/contest/620/problem/E [算法] 显然 , 一棵子树的DFS序必然为连续的一段 用线段树维护颜色数即可 [代码] #in ...
- 洛谷 P2585 [ ZJOI 2006 ] 三色二叉树 —— 树形DP
题目:https://www.luogu.org/problemnew/show/P2585 首先,三色其实记录两种状态:是绿色,不是绿色 即可,因为红蓝可以随意取反: 一开始因为懒得还原出树,所以写 ...
- POJ1912 A highway and the seven dwarfs (判断凸包与直线相交 logn)
POJ1912 给定n个点 和若干条直线,判断对于一条直线,是否存在两个点在直线的两侧. 显然原命题等价于 凸包与直线是否相交. O(n)的算法是显而易见的 但是直线数量太多 就会复杂到O(n^2)由 ...