当前位置: 首页 > 工具软件 > SolrJ > 使用案例 >

【SolrJ8.2.0】使用SolrJ8.2.0最新版连接solr服务实现新增/查询/删除

訾安邦
2023-12-01

前言

在Solr使用过程中,对Solr版本进行了升级,升级后发现API也变更了,所以这儿通过查阅相关的API情况,整理这篇文章!

 

使用SolrJ8.2.0最新版连接solr服务实现新增/查询/删除

1、使用solrj需要导入依赖包:

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

 

2、新增文档:

/**
	 * 
	 * @author HuaZai
	 * @contact who.seek.me@java98k.vip
	 * @title addDocument
	 *        <ul>
	 * @description 添加文档
	 *              </ul>
	 * @createdTime 2017年06月15日
	 * @return void
	 *
	 * @version : V1.0.0
	 */
	@Test
	public void addDocument()
	{
		// 通过HttpSolrClient.Builder一个SolrClient对象
		SolrClient solrClient = new HttpSolrClient.Builder()
				.withBaseSolrUrl(SOLR_URL)
				.withConnectionTimeout(10000)
				.withSocketTimeout(60000)
				.build();

		// 创建SolrInputDocument文档流对象
		SolrInputDocument doc = new SolrInputDocument();
		doc.addField("id", "1001");
		doc.addField("title", "测试数据");
		doc.addField("node", "1919");
		doc.addField("desc", "这是一条测试数据");

		try
		{
			// 添加文档
			solrClient.add(doc);
			// 提交文档
			solrClient.commit();
		} catch (SolrServerException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		} catch (Exception e)
		{
			e.printStackTrace();
		} finally
		{
			// 关闭连接
			try
			{
				solrClient.close();
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}

 

2、查询文档

	/**
	 * 
	 * @author HuaZai
	 * @contact who.seek.me@java98k.vip
	 * @title queryDocumentById
	 *        <ul>
	 * @description 根据文档ID查询文档
	 *              </ul>
	 * @createdTime 2017年06月15日
	 * @return void
	 *
	 * @version : V1.0.0
	 */
	@Test
	public void queryDocumentById()
	{
		// 通过HttpSolrClient.Builder一个SolrClient对象
		SolrClient solrClient = new HttpSolrClient.Builder()
				.withBaseSolrUrl(SOLR_URL)
				.withConnectionTimeout(10000)
				.withSocketTimeout(60000)
				.build();

		// 设置查询参数
		// 第一种查询方式():MapSolrParams来实现
		HashMap<String, String> map = new HashMap<>();
		// 设置查询参数
		map.put("q", "id:1001");
		// 创建MapSolrParams查询对象
		MapSolrParams solrParams = new MapSolrParams(map);

		// 第二种查询方式:SolrParams 有一个 SolrQuery 子类来实现
		SolrQuery solrQuery = new SolrQuery("id:1001");
		// 指定需要回显的内容
		solrQuery.addField("id");
		solrQuery.addField("title");
		solrQuery.addField("node");

		try
		{
			// 根据参数查询指定文档
			QueryResponse query = solrClient.query(solrParams);
			// 提交查询请求
			solrClient.commit();
			// 输出查询内容
			SolrDocumentList list = query.getResults();
			for (SolrDocument document : list)
			{
				System.err.println("问题ID:" + document.get("id"));
				System.err.println("问题标题:" + document.get("title"));
				System.err.println("副标题:" + document.get("node"));
			}
		} catch (SolrServerException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		} catch (Exception e)
		{
			e.printStackTrace();
		} finally
		{
			// 关闭连接
			try
			{
				solrClient.close();
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}

 

3-1、删除文档

	/**
	 * 
	 * @author HuaZai
	 * @contact who.seek.me@java98k.vip
	 * @title deleteDocumentById
	 *        <ul>
	 * @description 根据文档ID删除文档
	 *              </ul>
	 * @createdTime 2017年06月15日
	 * @throws SolrServerException
	 * @throws IOException
	 * @return void
	 *
	 * @version : V1.0.0
	 */
	@Test
	public void deleteDocumentById()
	{
		// 通过HttpSolrClient.Builder一个SolrClient对象
		SolrClient solrClient = new HttpSolrClient.Builder()
				.withBaseSolrUrl(SOLR_URL)
				.withConnectionTimeout(10000)
				.withSocketTimeout(60000)
				.build();

		try
		{
			// 删除指定ID的文档
			solrClient.deleteById("1001");
			// 提交请求
			solrClient.commit();
		} catch (SolrServerException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		} catch (Exception e)
		{
			e.printStackTrace();
		} finally
		{
			// 关闭连接
			try
			{
				solrClient.close();
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}

 

3-2、查询删除

	/**
	 * 
	 * @author HuaZai
	 * @contact who.seek.me@java98k.vip
	 * @title deleteDocumentByQuery
	 *        <ul>
	 * @description 查询删除
	 *              </ul>
	 * @createdTime 2017年06月15日
	 * @return void
	 *
	 * @version : V1.0.0
	 */
	@Test
	public void deleteDocumentByQuery()
	{
		// 通过HttpSolrClient.Builder一个SolrClient对象
		SolrClient solrClient = new HttpSolrClient.Builder()
				.withBaseSolrUrl(SOLR_URL)
				.withConnectionTimeout(10000)
				.withSocketTimeout(60000)
				.build();

		try
		{
			// 删除指定ID的文档
			solrClient.deleteByQuery("id:1001");
			// 提交请求
			solrClient.commit();
		} catch (SolrServerException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		} catch (Exception e)
		{
			e.printStackTrace();
		} finally
		{
			// 关闭连接
			try
			{
				solrClient.close();
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}

 

4、查询文档

	/**
	 * 
	 * @author HuaZai
	 * @contact who.seek.me@java98k.vip
	 * @title queryDocumentById
	 *        <ul>
	 * @description 根据文档ID查询文档
	 *              </ul>
	 * @createdTime 2017年06月15日
	 * @return void
	 *
	 * @version : V1.0.0
	 */
	@Test
	public void queryDocumentById()
	{
		// 通过HttpSolrClient.Builder一个SolrClient对象
		SolrClient solrClient = new HttpSolrClient.Builder()
				.withBaseSolrUrl(SOLR_URL)
				.withConnectionTimeout(10000)
				.withSocketTimeout(60000)
				.build();

		// 设置查询参数
		// 第一种查询方式():MapSolrParams来实现
		HashMap<String, String> map = new HashMap<>();
		// 设置查询参数
		map.put("q", "id:1001");
		// 创建MapSolrParams查询对象
		MapSolrParams solrParams = new MapSolrParams(map);

		// 第二种查询方式:SolrParams 有一个 SolrQuery 子类来实现
		SolrQuery solrQuery = new SolrQuery("id:1001");
		// 指定需要回显的内容
		solrQuery.addField("id");
		solrQuery.addField("title");
		solrQuery.addField("node");

		try
		{
			// 根据参数查询指定文档
			QueryResponse query = solrClient.query(solrParams);
			// 提交查询请求
			solrClient.commit();
			// 输出查询内容
			SolrDocumentList list = query.getResults();
			for (SolrDocument document : list)
			{
				System.err.println("问题ID:" + document.get("id"));
				System.err.println("问题标题:" + document.get("title"));
				System.err.println("副标题:" + document.get("node"));
			}
		} catch (SolrServerException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		} catch (Exception e)
		{
			e.printStackTrace();
		} finally
		{
			// 关闭连接
			try
			{
				solrClient.close();
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}

 

5、完整示例代码:

package com.huazai.b2c.aiyou.test.solrj;

import java.io.IOException;
import java.util.HashMap;

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.MapSolrParams;
import org.junit.Test;

/**
 * 
 * @author HuaZai
 * @contact who.seek.me@java98k.vip
 *          <ul>
 * @description 测试solrj客户端
 *              </ul>
 * @className TSolrjClient
 * @package com.huazai.b2c.aiyou.test.solrj
 * @createdTime 2017年06月14日
 *
 * @version V1.0.0
 */
public class TSolrjClient
{
	public static final String SOLR_URL = "http://***.***.***.***:****/solr/core_name";

	/**
	 * 
	 * @author HuaZai
	 * @contact who.seek.me@java98k.vip
	 * @title addDocument
	 *        <ul>
	 * @description 添加文档
	 *              </ul>
	 * @createdTime 2017年06月15日
	 * @return void
	 *
	 * @version : V1.0.0
	 */
	@Test
	public void addDocument()
	{
		// 通过HttpSolrClient.Builder一个SolrClient对象
		SolrClient solrClient = new HttpSolrClient.Builder()
				.withBaseSolrUrl(SOLR_URL)
				.withConnectionTimeout(10000)
				.withSocketTimeout(60000)
				.build();

		// 创建SolrInputDocument文档流对象
		SolrInputDocument doc = new SolrInputDocument();
		doc.addField("id", "1001");
		doc.addField("title", "测试数据");
		doc.addField("node", "1919");
		doc.addField("desc", "这是一条测试数据");

		try
		{
			// 添加文档
			solrClient.add(doc);
			// 提交文档
			solrClient.commit();
		} catch (SolrServerException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		} catch (Exception e)
		{
			e.printStackTrace();
		} finally
		{
			// 关闭连接
			try
			{
				solrClient.close();
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}

	/**
	 * 
	 * @author HuaZai
	 * @contact who.seek.me@java98k.vip
	 * @title deleteDocumentById
	 *        <ul>
	 * @description 根据文档ID删除文档
	 *              </ul>
	 * @createdTime 2017年06月15日
	 * @throws SolrServerException
	 * @throws IOException
	 * @return void
	 *
	 * @version : V1.0.0
	 */
	@Test
	public void deleteDocumentById()
	{
		// 通过HttpSolrClient.Builder一个SolrClient对象
		SolrClient solrClient = new HttpSolrClient.Builder()
				.withBaseSolrUrl(SOLR_URL)
				.withConnectionTimeout(10000)
				.withSocketTimeout(60000)
				.build();

		try
		{
			// 删除指定ID的文档
			solrClient.deleteById("1001");
			// 提交请求
			solrClient.commit();
		} catch (SolrServerException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		} catch (Exception e)
		{
			e.printStackTrace();
		} finally
		{
			// 关闭连接
			try
			{
				solrClient.close();
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}

	/**
	 * 
	 * @author HuaZai
	 * @contact who.seek.me@java98k.vip
	 * @title deleteDocumentByQuery
	 *        <ul>
	 * @description 查询删除
	 *              </ul>
	 * @createdTime 2017年06月15日
	 * @return void
	 *
	 * @version : V1.0.0
	 */
	@Test
	public void deleteDocumentByQuery()
	{
		// 通过HttpSolrClient.Builder一个SolrClient对象
		SolrClient solrClient = new HttpSolrClient.Builder()
				.withBaseSolrUrl(SOLR_URL)
				.withConnectionTimeout(10000)
				.withSocketTimeout(60000)
				.build();

		try
		{
			// 删除指定ID的文档
			solrClient.deleteByQuery("id:1001");
			// 提交请求
			solrClient.commit();
		} catch (SolrServerException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		} catch (Exception e)
		{
			e.printStackTrace();
		} finally
		{
			// 关闭连接
			try
			{
				solrClient.close();
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}

	/**
	 * 
	 * @author HuaZai
	 * @contact who.seek.me@java98k.vip
	 * @title queryDocumentById
	 *        <ul>
	 * @description 根据文档ID查询文档
	 *              </ul>
	 * @createdTime 2017年06月15日
	 * @return void
	 *
	 * @version : V1.0.0
	 */
	@Test
	public void queryDocumentById()
	{
		// 通过HttpSolrClient.Builder一个SolrClient对象
		SolrClient solrClient = new HttpSolrClient.Builder()
				.withBaseSolrUrl(SOLR_URL)
				.withConnectionTimeout(10000)
				.withSocketTimeout(60000)
				.build();

		// 设置查询参数
		// 第一种查询方式():MapSolrParams来实现
		HashMap<String, String> map = new HashMap<>();
		// 设置查询参数
		map.put("q", "id:1001");
		// 创建MapSolrParams查询对象
		MapSolrParams solrParams = new MapSolrParams(map);

		// 第二种查询方式:SolrParams 有一个 SolrQuery 子类来实现
		SolrQuery solrQuery = new SolrQuery("id:1001");
		// 指定需要回显的内容
		solrQuery.addField("id");
		solrQuery.addField("title");
		solrQuery.addField("node");

		try
		{
			// 根据参数查询指定文档
			QueryResponse query = solrClient.query(solrParams);
			// 提交查询请求
			solrClient.commit();
			// 输出查询内容
			SolrDocumentList list = query.getResults();
			for (SolrDocument document : list)
			{
				System.err.println("问题ID:" + document.get("id"));
				System.err.println("问题标题:" + document.get("title"));
				System.err.println("副标题:" + document.get("node"));
			}
		} catch (SolrServerException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		} catch (Exception e)
		{
			e.printStackTrace();
		} finally
		{
			// 关闭连接
			try
			{
				solrClient.close();
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}

}

 

 

 

 

 


 好了,关于 【SolrJ8.2.0】使用SolrJ8.2.0最新版连接solr服务实现新增/查询/删除 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。 
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。


作       者:华    仔
联系作者:who.seek.me@java98k.vip
来        源:CSDN (Chinese Software Developer Network)
原        文:https://blog.csdn.net/Hello_World_QWP/article/details/98331238
版权声明:本文为博主原创文章,请在转载时务必注明博文出处!
 类似资料: