学习淘淘商城第四十一课(使用solrj来测试索引库)

110 篇文章 383 订阅
8 篇文章 0 订阅

       我们使用solrj来操作solr服务,一般习惯先建一个测试类测试下增删改查方法是否好使,这样可以大大减少出错概率,提升开发效率。

       我们的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中定义的。

package com.taotao.solrj;

import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test;

public class TestSolrJ {
    
	@Test
	public void testAddDocument() throws Exception{
		//创建一个SolrServer对象,创建一个HttpSolrServer对象,需要指定solr服务的url
		//如果有多个collection则需要指定要操作哪个collection,如果只有一个,可以不指定
		SolrServer solrServer = new HttpSolrServer("http://192.168.156.22:8080/solr/collection1");
		//创建一个文档对象SolrInputDocument
		SolrInputDocument document = new SolrInputDocument();
		//向文档中添加域,必须有id域,域的名称必须在schema.xml中定义
		document.addField("id", "1111");
		document.addField("item_title", "海尔空调");
		document.addField("item_sell_point", "送电暖宝一个哦");
		document.addField("item_price", 10000);
		document.addField("item_image", "http://www.123.jpg");
		document.addField("item_category_name", "电器");
		document.addField("item_desc", "这是一款最新的空调,质量好,值得信赖!!");
		//将document添加到索引库
		solrServer.add(document);
		//提交
		solrServer.commit();
	}
}

      执行上面的方法,成功后,我们到Solr首页,点击"Execute Query"按钮,即可查询到我们刚才添加的文本。

       大家发现了没有,在查询出来的数据当中没有item_desc字段,这是因为在schema.xml文件中指定该字段不保存,如下图所示,indexed="true"表示分词存储,可以查询stored="false"表示不存储内容。stored="false"该字段就不会随查询结果一起显示,stored="true"才会显示。

        下面我们来测试通过ID删除文档

@Test
	public void testDeleteDocument() throws Exception{
		//创建一个SolrServer对象,创建一个HttpSolrServer对象,需要指定solr服务的url
		SolrServer solrServer = new HttpSolrServer("http://192.168.156.22:8080/solr/collection1");
		//通过id来删除文档
		solrServer.deleteById("1111");
		//提交
		solrServer.commit();
	}

        删除完之后,我们再查询,发现已经没有刚才我们添加的那个文档了,如下图所示。

          下面我们再测试另外一种删除方法,由于刚才我们把仅存的一条文档删除了,现在我们再添加两条数据,如下图所示。

        通过搜索删除代码如下

@Test
	public void deleteDocumentByQuery() throws Exception{
		//创建一个SolrServer对象,创建一个HttpSolrServer对象,需要指定solr服务的url
		SolrServer solrServer = new HttpSolrServer("http://192.168.156.22:8080/solr/collection1");
		//通过价格来删除文档
		solrServer.deleteByQuery("item_price:20000");
		//提交
		solrServer.commit();
	}
        删除后,我们再查询,发现已经没有价格为2000的那个文档记录了,如下图所示。

        至于修改操作其实就是添加操作,ID一样的,新记录会覆盖老记录,从而达到修改的目的

       下面我们进行查询操作,如下所示。

	@Test
	public void queryDocument() throws Exception{
		//创建一个SolrServer对象,创建一个HttpSolrServer对象,需要指定solr服务的url
		SolrServer solrServer = new HttpSolrServer("http://192.168.156.22:8080/solr/collection1");
		//通过id来删除文档
		SolrQuery query = new SolrQuery();
		query.setQuery("id:222");
		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);
		}
	}

        


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值