Java API SolrJ 的使用

Java API SolrJ 的使用 #

一、SolrJ 简介 #

SolrJ 是操作 Solr 的 Java 客户端,它提供了增加、修改、删除、查询 Solr 索引的 Java 接口。通过 SolrJ 提供的 API 接口来操作 Solr 服务,SolrJ 底层是通过使用 httpClient 中的方法来完成 Solr的操作。

二、SolrJ 核心类 SolrClient #

  • SolrClient 有一些具体的实现,每个实现都针对不同的使用模式或弹性模型:

    • HttpSolrClient- 面向以查询为中心的工作负载,但也是一个很好的通用客户端。直接与单个 Solr 节点通信。

    • Http2SolrClient- 利用 HTTP/2 的异步、非阻塞和通用客户端。这个类是实验性的,因此它的 API 可能会在 SolrJ 的次要版本中更改或删除。

    • LBHttpSolrClient- 在 Solr 节点列表之间平衡请求负载。根据节点健康状况调整“服务中”节点列表。

    • LBHttp2SolrClient- 就像 LBHttpSolrClient 而是使用 Http2SolrClient。这个类是实验性的,因此它的 API 可能会在 SolrJ 的次要版本中更改或删除。

    • CloudSolrClient- 面向与 SolrCloud 部署通信。使用已经记录的 ZooKeeper 状态来发现请求并将其路由到健康的 Solr 节点。

    • ConcurrentUpdateSolrClient- 面向以索引为中心的工作负载。在将更大的批次发送到 Solr 之前在内部缓冲文档。

    • ConcurrentUpdateHttp2SolrClient- 就像 ConcurrentUpdateSolrClient 而是使用 Http2SolrClient。这个类是实验性的,因此它的 API 可能会在 SolrJ 的次要版本中更改或删除。

SolrJ 所有 API 接口Solr 8.11.0 solr-solrj API。

三、SolrClient 类的简单使用(增删改查) #

在使用前先引入 SolrJ 依赖

<dependency>
  <groupId>org.apache.solr</groupId>
  <artifactId>solr-solrj</artifactId>
  <version>8.11.0</version>
</dependency>
  • 1、添加文档
@Test
public void testAdd() throws Exception{
	//1.创建连接
	HttpSolrClient solrServer = new HttpSolrClient.Builder("http://localhost:8983/solr/solrTest").build();
    for (int i = 1; i <= 10; i++){ 
        //2.创建一个文档对象
	    SolrInputDocument inputDocument = new SolrInputDocument();
	    //向文档中添加域以及对应的值(注意:所有的域必须在schema.xml中定义过,前两篇导入时已定义)
	    inputDocument.addField("id", i);
	    inputDocument.addField("name", "名称"+i);
	    inputDocument.addField("content", "内容"+i);
	    //3.将文档写入索引库中
	    solrServer.add(inputDocument); 
    }	
    
	//4.提交
	solrServer.commit();
}
  • 2、更新文档(其实更新的内容不存在则是新增)
@Test
public void testUpdate() throws Exception{
	//1.创建连接
	HttpSolrClient solrServer = new HttpSolrClient.Builder("http://localhost:8983/solr/solrTest").build();
	//2.创建一个文档对象
	SolrInputDocument inputDocument = new SolrInputDocument();
	inputDocument.addField("id", "1");
	//修改id为1的信息(信息存在则更新,不存在则新增)
	inputDocument.addField("name", "名称1");
	inputDocument.addField("content", "内容1");
	//3.将文档写入索引库中
	solrServer.add(inputDocument);
	//4.提交
	solrServer.commit();
}
  • 3、查询单个
@Test
public void testQuery() throws Exception{
	//1.创建连接
	HttpSolrClient solrServer = new HttpSolrClient.Builder("http://localhost:8983/solr/solrTest").build();
	//2.创建查询语句
	SolrQuery query = new SolrQuery();
	//3.设置查询条件
	query.set("q", "id:1");
	//4.执行查询
	QueryResponse queryResponse = solrServer.query(query);
	//5.取文档列表(public class SolrDocumentList extends ArrayList<SolrDocument>)
	SolrDocumentList documentList = queryResponse.getResults();
	for (SolrDocument solrDocument : documentList) {
		System.out.println("id:"+solrDocument.get("id")+" ");
		System.out.println("名称:"+solrDocument.get("name")+" ");
		System.out.println("内容:"+solrDocument.get("content")+" ");
	}
}
  • 4、多条件查询带分页
@Test
public void testQueryByCon() throws Exception{
	//创建连接
	HttpSolrClient solrServer = new HttpSolrClient.Builder("http://localhost:8983/solr/solrTest").build();
	//创建查询语句
	SolrQuery query = new SolrQuery();
	//设置查询条件
    //设置查询关键字
	query.set("q", "*称");
    //按照id降序排列
	query.setSort("id", SolrQuery.ORDER.desc);
	//分页条件
    query.setStart(0);
	query.setRows(2);
    //默认在名称域进行查询
	query.set("df", "name");
    //设置高亮
    solrQuery.setHighlight(true);
    //设置高亮的字段
    solrQuery.addHighlightField("name,content");
    //设置高亮的样式
    solrQuery.setHighlightSimplePre("<font color='red'>");
    solrQuery.setHighlightSimplePost("</font>");
	//执行查询
	QueryResponse queryResponse = solrServer.query(query);
    //返回高亮显示结果
    Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
	//获取文档列表
	SolrDocumentList documentList = queryResponse.getResults();
	System.out.println("总记录数:" + documentList.getNumFound());
	for (SolrDocument solrDocument : documentList) {
		System.out.println("id:"+solrDocument.get("id")+" ");
		System.out.println("名称:"+solrDocument.get("name")+" ");
		System.out.println("内容:"+solrDocument.get("content")+" ");
	}
}
  • 5、删除文档
/**
 * 根据id删除文档
 */
@Test
public void testDeleteById() throws Exception{
	//1.创建连接
	HttpSolrClient solrServer = new HttpSolrClient.Builder("http://localhost:8983/solr/solrTest").build();
	//2.删除文档
	solrServer.deleteById("1");
	//3.提交
	solrServer.commit();
}
 
 
/**
 * 根据条件删除文档
 */
@Test
public void testDeleteById() throws Exception{
	//1.创建连接
	HttpSolrClient solrServer = new HttpSolrClient.Builder("http://localhost:8983/solr/solrTest").build();
	//2.删除文档
	solrServer.deleteByQuery("name:名称");
	//3.提交
	solrServer.commit();
}