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来测试索引库的更多相关文章

  1. (转)淘淘商城系列——导入商品数据到索引库——Service层

    http://blog.csdn.net/yerenyuan_pku/article/details/72894187 通过上文的学习,我相信大家已经学会了如何使用Solrj来操作索引库.本文我们将把 ...

  2. 使用solrj操作solr索引库

    (solrj)初次使用solr的开发人员总是很郁闷,不知道如何去操作solr索引库,以为只能用<五分钟solr4.5教程(搭建.运行)>中讲到的用xml文件的形式提交数据到索引库,其实没有 ...

  3. 使用solrj操作solr索引库,solr是lucene服务器

    客户端开发 Solrj 客户端开发 Solrj Solr是搭建好的lucene服务器 当然不可能完全满足一般的业务需求 可能 要针对各种的架构和业务调整 这里就需要用到Solrj了 Solrj是Sol ...

  4. (转) 淘淘商城系列——使用SolrJ查询索引库

    http://blog.csdn.net/yerenyuan_pku/article/details/72908538 我们有必要在工程中写查询索引库的代码前先进行必要的测试.我们先到Solr服务页面 ...

  5. 通过Solrj实现对索引库中数据的局部更新操作

    for (UpdateIndexDTO updateIndexDTO : data) { // 局部更新 SolrInputDocument doc = new SolrInputDocument() ...

  6. JAVAEE——宜立方商城07:Linux上搭建Solr服务、数据库导入索引库、搜索功能的实现

    1. 学习计划 1.Solr服务搭建 2.Solrj使用测试 3.把数据库中的数据导入索引库 4.搜索功能的实现 2. Solr服务搭建 2.1. Solr的环境 Solr是java开发. 需要安装j ...

  7. 商城06——solr索引库搭建&solr搜索功能实现&图片显示问题解决

    1.   课程计划 1.搜索工程的搭建 2.linux下solr服务的搭建 3.Solrj使用测试 4.把数据库中的数据导入索引库 5.搜索功能的实现 2.   搜索工程搭建 要实现搜索功能,需要搭建 ...

  8. (转)淘淘商城系列——使用maven构建工程

    http://blog.csdn.net/yerenyuan_pku/article/details/72669269 开发工具和环境 这里,我统一规范一下淘淘商城的开发工具和环境,如下: Eclip ...

  9. (转) 淘淘商城系列——CMS内容管理系统工程搭建

    http://blog.csdn.net/yerenyuan_pku/article/details/72825801 淘淘商城系列——CMS内容管理系统工程搭建 上文我们一起搭建了表现层中的商城门户 ...

随机推荐

  1. 运行shell脚本报错 &#39;\357\273\277&#39;: command not found 解决的方法

    1,删除BOM,在vi以下运行以下的命令就可以 :set nobomb 2,原因: 所谓BOM,全称是Byte Order Mark.它是一个Unicode字符,通常出如今文本的开头,用来标识字节序( ...

  2. SDUST 2844-Mineral Water(数学)

    Mineral Water nid=24#time" title="C.C++.go.haskell.lua.pascal Time Limit1000ms Memory Limi ...

  3. 华为云分布式数据库中间件DDM和开源MyCAT对比

    前言 华为云分布式数据库中间件(Distributed Database Middleware)是解决数据库容量.性能瓶颈和分布式扩展问题的中间件服务,提供分库分表.读写分离.弹性扩容等能力,应对海量 ...

  4. redis集群状态信息维护脚本

    近期在做redis相关的东西.须要把2台redis切分成16个shard. 16个主shard分布在4台128G的机器上,从shard分布在12台64G的机器上.因为机器太多,查询相关的信息不太方便. ...

  5. 【bzoj1269】[AHOI2006]文本编辑器editor

    在bzoj上乱翻,发现了可持久化并查集,然后baidu了一下,发现一种叫rope的东西.   !!!真的太爽了!!!   直接上代码,感受一下(也是蒯来的).       由于rope的底层实现,in ...

  6. 最大heap

    1 什么是最大heap 最大heap是一棵完全二叉树.每棵子树的根比它的两棵子树上的节点都要大. 2 建堆的过程 function max_heaptify(A): for (i = n/2向下取整: ...

  7. .net 接收存储过程的返回值 。。。。

    .net 接收存储过程的返回值 .... Posted on 2009-06-10 20:26 且行且思 阅读(...) 评论(...) 编辑 收藏 例如在向数据库添加新数据时,需要检测是否有重复 本 ...

  8. [Codeforces Education Round 6E] New Year Tree

    [题目链接] https://codeforces.com/contest/620/problem/E [算法] 显然 , 一棵子树的DFS序必然为连续的一段 用线段树维护颜色数即可 [代码] #in ...

  9. 洛谷 P2585 [ ZJOI 2006 ] 三色二叉树 —— 树形DP

    题目:https://www.luogu.org/problemnew/show/P2585 首先,三色其实记录两种状态:是绿色,不是绿色 即可,因为红蓝可以随意取反: 一开始因为懒得还原出树,所以写 ...

  10. POJ1912 A highway and the seven dwarfs (判断凸包与直线相交 logn)

    POJ1912 给定n个点 和若干条直线,判断对于一条直线,是否存在两个点在直线的两侧. 显然原命题等价于 凸包与直线是否相交. O(n)的算法是显而易见的 但是直线数量太多 就会复杂到O(n^2)由 ...