SolrJ客户端连接Solr进行增删改查

本文详细介绍如何使用SolrJ,一种Solr的Java客户端API,来实现文档的添加、删除及查询功能。通过示例代码,展示了如何配置SolrJ与Solr服务器通信,包括设置超时时间、创建文档、提交更改、执行查询以及应用过滤和排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

SolrJ是什么?

SolrJ是Solr官方提供的Java Client,SolrJ是一个API,它使得Java应用程序很容易与SOLR对话。solrj隐藏了许多连接到solr的细节,并允许应用程序使用简单的高级方法与solr交互

.NET(C#)连接solr可以使用开源库SolrNet

github地址:https://github.com/SolrNet

 

添加SolrJ的引用:

1.若非maven项目

SolrJ的jar包就在solr的解压目录下,可以直接从/usr/local/solr-7.6.0/dist 下拷贝 solr-solrj-7.6.0.jar

solrJ也依赖一些jar包,这些jar包也在该目录下的solrj-lib文件夹中


 

2.若是Maven项目

则直接添加依赖,版本号就参考solr目录下的solrJ jar包的版本号

<dependency>
       <groupId>org.apache.solr</groupId>
       <artifactId>solr-solrj</artifactId>
       <version>7.6.0</version>
</dependency>

 

编写测试代码:

首先启动solr服务

新建solrJTest.java:

新增/修改内容

修改内容就是使用同样的id,再新增一次即可

package com.taotao.rest.solrj;

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test;

public class SolrjTest {

	@Test
	public void addDoc() throws Exception{

        final String solrUrl = "http://120.77.204.80:8080/solr/new_core";
	SolrClient solrClient=new HttpSolrClient.Builder(solrUrl).withConnectionTimeout(10000)
				.withSocketTimeout(6000).build();
	//创建SolrInputDocument对象
	SolrInputDocument document=new SolrInputDocument();
	// 第一个参数:域的名称,域的名称必须是在managed_schema.xml中定义的
        // 第二个参数:域的值
        // 注意:id的域不能少
	document.addField("id", "005");
        document.addField("title", "使用solrJ添加的文档");
        document.addField("content", "这就是内容");

        solrClient.add(document);
        //提交
        solrClient.commit();
	}
}

报错了:java.lang.NoSuchMethodError:org.apache.http.impl.conn.PoolingHttpClientConnectionManager.setValidateAfterInactivity(I)V    at org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:279)   

报的是NoSuchMethodError,找不到方法,因为solrJ 引用了httpclient,所以是由于httpclient里找不到setValidateAfterInactivity这个方法,看了下原先的httpclient是4.3.5,但是solrJ依赖的httpclient是4.5.3,所以修改下httplcient的版本

运行测试代码,打开solrAdmin管理页

选择Query-->execute Query

 可以看到已经成功添加

删除内容

	@Test
	public void deleteDoc() throws Exception{

        final String solrUrl = "http://120.77.204.80:8080/solr/new_core";
		SolrClient solrClient=new HttpSolrClient.Builder(solrUrl).withConnectionTimeout(10000)
				.withSocketTimeout(6000).build();
        //根据id删除
        //solrClient.deleteById("005");
        //根据查询条件删除
        solrClient.deleteByQuery("*:*");
        //提交
        solrClient.commit();
	}

查询内容

@Test
	public void QueryDoc() throws Exception{
	 final String solrUrl = "http://120.77.204.80:8080/solr/new_core";
     HttpSolrClient solrServer = new HttpSolrClient.Builder(solrUrl)
         .withConnectionTimeout(10000)
         .withSocketTimeout(60000)
         .build();
     SolrQuery query = new SolrQuery();
     query.set("q", "id:005");
     // 调用server的查询方法,查询索引库
     QueryResponse response = solrServer.query(query);
     // 查询结果
     SolrDocumentList results = response.getResults();
     // 查询结果总数
     long cnt = results.getNumFound();
     System.out.println("查询结果总数:" + cnt);
     for (SolrDocument solrDocument : results) {
         System.out.println(solrDocument.get("id"));
         System.out.println(solrDocument.get("title"));
         System.out.println(solrDocument.get("content"));
     }
}

根据各种条件查询

@Test
	public void QueryDocFiter() throws Exception {
		final String solrUrl = "http://120.77.204.80:8080/solr/new_core";
		HttpSolrClient solrServer = new HttpSolrClient.Builder(solrUrl).withConnectionTimeout(10000)
				.withSocketTimeout(60000).build();
		SolrQuery query = new SolrQuery();
		query.setQuery("*:*");
		// 设置过滤条件
		query.setFilterQueries("content:内容");
		// 设置排序
		query.setSort("id", SolrQuery.ORDER.desc);
		// 设置分页信息
		query.setStart(0);
		query.setRows(10);
		// 设置显得的域的列表
		query.setFields("id", "title", "content");
		// 设置默认搜索域
		query.set("df", "content");
		// 设置高亮
		query.setHighlight(true);
		query.addHighlightField("content");
		query.setHighlightSimplePre("<em>");
		query.setHighlightSimplePost("</em>");

		// 调用server的查询方法,查询索引库
		QueryResponse response = solrServer.query(query);

		// 查询结果
		SolrDocumentList results = response.getResults();

		// 查询结果总数
		long cnt = results.getNumFound();
		System.out.println("查询结果总数:" + cnt);

		for (SolrDocument solrDocument : results) {

			System.out.println(solrDocument.get("id"));
			System.out.println(solrDocument.get("title"));
			System.out.println(solrDocument.get("content"));
		}
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值