SolrJ的介绍与使用

SolrJ的介绍与使用

首页角色扮演代号侠正版更新时间:2024-04-30
SolrJ

solrJ是一个用来访问solr的Java客户端,提供了索引和搜索的方法(将一些常用的命令封装进去了),通过solrJ提供的API 接口来操作solr服务。

依赖:

<dependency>

<groupId>org.apache.solr</groupId>

<artifactId>solr-solrj</artifactId>

<version>7.7.3</version>

</dependency>

SolrJ的核心API
  1. SolrClient
  2. SolrRequest
  3. SolrResponse

SolrClient 的子类

HttpSolrClient – 与指定的一个solr节点通信的客户端

LBHttpSolrClient –负载均衡地访问一组节点的客户端

CloudSolrClient – 访问solrCloud的客户端

ConcurrentUpdateSolrClient –并发更新索引用的客户端

创建客户端时,通用的配置选项
  1. Base URL
  2. Timeouts

Base URL 基础URL

http://hostname:8983/solr/core1

http://hostname:8983/solr

Timeouts

final String solrUrl = "http://localhost:8983/solr"; return new HttpSolrClient.builder(solrUrl) .withConnectionTimeout(10000) .build();SolrJ使用

索引文档

final SolrClient client = getSolrClient(); final SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", UUID.randomUUID().toString()); doc.addField("name", "Amazon Kindle Paperwhite"); final UpdateResponse updateResponse = client.add("techproducts", doc); // Indexed documents must be committed client.commit("techproducts");

用SolrJ查询

final SolrClient client = getSolrClient(); final Map<String, String> queryParamMap = new HashMap<String, String>(); queryParamMap.put("q", "*:*"); queryParamMap.put("fl", "id, name"); queryParamMap.put("sort", "id asc"); MapSolrParams queryParams = new MapSolrParams(queryParamMap); final QueryResponse response = client.query("techproducts", queryParams); final SolrDocumentList documents = response.getResults(); for(SolrDocument document : documents) { final String id = (String) document.getFirstValue("id"); final String name = (String) document.getFirstValue("name"); ...... }

Java 对象绑定

public static class TechProduct { @Field public String id; @Field public String name; public TechProduct(String id, String name) { this.id = id; this.name = name; } public TechProduct() {} }

添加索引

final SolrClient client = getSolrClient(); final TechProduct kindle = new TechProduct("kindle-id-4", "Amazon Kindle Paperwhite"); final UpdateResponse response = client.addBean("techproducts", kindle); client.commit("techproducts");

查询

final SolrClient client = getSolrClient(); final SolrQuery query = new SolrQuery("*:*"); query.addField("id"); query.addField("name"); query.setSort("id", ORDER.asc); final List<TechProduct> products = response.getBeans(TechProduct.class);

查询Demo

public class SolrJClientDemo { // baseSolrUrl 示例 private static String baseSolrUrl = "http://localhost:8983/solr/"; private static String baseSolrUrlWithCollection = "http://localhost:8983/solr/techproducts"; /** * HttpSolrClient:与一个solr Server 通过http进行通信 */ public static SolrClient getHttpSolrClient(String baseSolrUrl) { return new HttpSolrClient.Builder(baseSolrUrl) .withConnectionTimeout(1000).withSocketTimeout(6000).build(); } public static SolrClient getHttpSolrClient() { return new HttpSolrClient.Builder(baseSolrUrl) .withConnectionTimeout(1000).withSocketTimeout(6000).build(); } /** * LBHttpSolrClient: 负载均衡的httpSolrClient <br> * 负载均衡方式: 轮询给定的多个solr server url。 * 当某个url不通时,url地址会从活跃列表移到死亡列表中,用下一个地址再次发送请求。<br> * 对于死亡列表中的url地址,会定期(默认每隔1分钟,可设置)去检测是否变活了,再加入到活跃列表中。 <br> * 注意: <br> * 1、不可用于主从结构master/slave 的索引场景,因为主从结构必须通过主节点来更新。 <br> * 2、对于SolrCloud(leader/replica),使用CloudSolrClient更好。 * 在solrCloud中可用它来进行索引更新,solrCloud中的节点会将请求转发到对应的leader。 */ public static SolrClient getLBHttpSolrClient(String... solrUrls) { return new LBHttpSolrClient.Builder().withBaseSolrUrls(solrUrls) .build(); } private static String baseSolrUrl2 = "http://localhost:7001/solr/"; public static SolrClient getLBHttpSolrClient() { return new LBHttpSolrClient.Builder() .withBaseSolrUrls(baseSolrUrl, baseSolrUrl2).build(); } /** * 访问SolrCloud集群用CloudSolrClient<br> * CloudSolrClient 实例通过访问zookeeper得到集群中集合的节点列表,<br> * 然后通过LBHttpSolrClient来负载均衡地发送请求。<br> * 注意:这个类默认文档的唯一键字段为“id”,如果不是的,通过 setIdField(String)方法指定。 */ public static SolrClient getCloudSolrClient(List<String> zkHosts, Optional<String> zkChroot) { return new CloudSolrClient.Builder(zkHosts, zkChroot).build(); } private static String zkServerUrl = "localhost:9983"; public static SolrClient getCloudSolrClient() { List<String> zkHosts = new ArrayList<String>(); zkHosts.add(zkServerUrl); Optional<String> zkChroot = Optional.empty(); return new CloudSolrClient.Builder(zkHosts, zkChroot).build(); } public static void main(String[] args) throws Exception { // HttpSolrClient 示例: SolrClient client = SolrJClientDemo.getHttpSolrClient(); SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", UUID.randomUUID().toString()); doc.addField("name", "HttpSolrClient"); UpdateResponse updateResponse = client.add("techproducts", doc); // 记得要提交 client.commit("techproducts"); System.out.println("------------ HttpSolrClient ------------"); System.out.println("add doc:" doc); System.out.println("response: " updateResponse.getResponse()); client.close(); // LBHttpSolrClient 示例 client = SolrJClientDemo.getLBHttpSolrClient(); doc.clear(); doc.addField("id", UUID.randomUUID().toString()); doc.addField("name", "LBHttpSolrClient"); updateResponse = client.add("techproducts", doc); // 记得要提交 client.commit("techproducts"); System.out.println("------------ LBHttpSolrClient ------------"); System.out.println("add doc:" doc); System.out.println("response: " updateResponse.getResponse()); client.close(); // CloudSolrClient 示例 client = SolrJClientDemo.getCloudSolrClient(); doc.clear(); doc.addField("id", UUID.randomUUID().toString()); doc.addField("name", "CloudSolrClient"); updateResponse = client.add("techproducts", doc); // 记得要提交 client.commit("techproducts"); System.out.println("------------ CloudSolrClient ------------"); System.out.println("add doc:" doc); System.out.println("response: " updateResponse.getResponse()); client.close(); } } ,

大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved