Solr增删改查例子
Solr初始化
Solr初始化
功能简介
Solr初始化是指在使用Solr提供的API之前,需要做的必要工作。目的是取得与SolrCoud的连接。
说明:
在进行完Solr操作后,需要调用cloudSolrClient.close()关闭所申请的资源。
Solr初始化
/** *初始化CloudSolrClient实例,连接SolrCloud private CloudSolrClient getCloudSolrClient(String zkHost) throws SolrException { Builder builder = new CloudSolrClient.Builder(); builder.withZkHost(zkHost); CloudSolrClient cloudSolrClient = builder.build(); cloudSolrClient.setZkClientTimeout(zkClientTimeout); cloudSolrClient.setZkConnectTimeout(zkConnectTimeout); cloudSolrClient.connect(); LOG.info("The cloud Server has been connected !!!!"); ZkStateReader zkStateReader = cloudSolrClient.getZkStateReader(); ClusterState cloudState = zkStateReader.getClusterState(); LOG.info("The zookeeper state is : {}", cloudState); return cloudSolrClient; }
查询collection
查询collection
功能简介
通过调用CollectionAdminRequest.List的process(cloudSolrClient)并调用返回的response来获取所有collection的名字。
代码样例
private List<String> queryAllCollections(CloudSolrClient cloudSolrClient) throws SolrException { CollectionAdminRequest.List list = new CollectionAdminRequest.List(); CollectionAdminResponse listRes = null; try { listRes = list.process(cloudSolrClient); } catch (SolrServerException | IOException e) { LOG.error("Failed to list collection", e); throw new SolrException("Failed to list collection"); } catch (Exception e) { LOG.error("Failed to list collection", e); throw new SolrException("unknown exception"); } List<String> collectionNames = (List<String>) listRes.getResponse().get("collections"); LOG.info("All existed collections : {}", collectionNames); return collectionNames; }
删除collection
删除collection
功能简介
通过调用CollectionAdminRequest.Delete的process(cloudSolrClient)并调用返回的response来判断是否执行删除collection操作成功。
代码样例
private void deleteCollection(CloudSolrClient cloudSolrClient) throws SolrException { CollectionAdminRequest.Delete delete = new CollectionAdminRequest.Delete(); delete.setCollectionName(COLLECTION_NAME); CollectionAdminResponse response = null; try { response = delete.process(cloudSolrClient); } catch (SolrServerException | IOException e) { LOG.error("Failed to delete collection", e); throw new SolrException("Failed to create collection"); } catch (Exception e) { LOG.error("Failed to delete collection", e); throw new SolrException("unknown exception"); } if (response.isSuccess()) { LOG.info("Success to delete collection[{}]", COLLECTION_NAME); } else { LOG.error("Failed to delete collection[{}], cause : {}", COLLECTION_NAME, response.getErrorMessages()); throw new SolrException("Failed to delete collection"); } }
创建collection
创建collection
功能简介
通过调用CollectionAdminRequest.Create的process(cloudSolrClient)并调用返回的response来判断是否执行创建collection操作成功。
代码样例
private void createCollection(CloudSolrClient cloudSolrClient) throws SolrException { CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(COLLECTION_NAME, DEFAULT_CONFIG_NAME, shardNum, replicaNum); CollectionAdminResponse response = null; try { response = create.process(cloudSolrClient); } catch (SolrServerException e) { LOG.error("Failed to create collection", e); throw new SolrException("Failed to create collection"); } catch (IOException e) { LOG.error("Failed to create collection", e); throw new SolrException("Failed to create collection"); } catch (Exception e) { LOG.error("Failed to create collection", e); throw new SolrException("unknown exception"); } if (response.isSuccess()) { LOG.info("Success to create collection[{}]", COLLECTION_NAME); } else { LOG.error("Failed to create collection[{}], cause : {}", COLLECTION_NAME, response.getErrorMessages()); throw new SolrException("Failed to create collection"); } }
添加Doc
添加Doc
功能简介
通过调用cloudSolrClient的add方法或者构造UpdateRequest调用cloudSolrClient的request方法来添加索引数据。
代码样例1
private void addDocs(CloudSolrClient cloudSolrClient) throws SolrException { Collection<SolrInputDocument> documents = new ArrayList<SolrInputDocument>(); for (Integer i = 0; i < 5; i++) { SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", i.toString()); doc.addField("name", "Luna_" + i); doc.addField("features", "test" + i); doc.addField("price", (float) i * 1.01); documents.add(doc); } try { cloudSolrClient.add(documents); LOG.info("success to add index"); } catch (SolrServerException e) { LOG.error("Failed to add document to collection", e); throw new SolrException("Failed to add document to collection"); } catch (IOException e) { LOG.error("Failed to add document to collection", e); throw new SolrException("Failed to add document to collection"); } catch (Exception e) { LOG.error("Failed to add document to collection", e); throw new SolrException("unknown exception"); } }
代码样例2
private void addDocs2(CloudSolrClient cloudSolrClient) throws SolrException{ UpdateRequest request = new UpdateRequest(); Collection<SolrInputDocument> documents = new ArrayList<>(); for (Integer i = 5; i < 10; i++) { SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", i.toString()); doc.addField("name", "张三" + i); doc.addField("features", "test" + i); doc.addField("price", (float) i * 1.01); documents.add(doc); } request.add(documents); try { cloudSolrClient.request(request); cloudSolrClient.commit(); } catch (SolrServerException | IOException e) { LOG.error("Failed to add document to collection", e); throw new SolrException("Failed to add document to collection"); } }
查询Doc
查询Doc
功能简介
通过构造SolrQuery实例,并调用cloudSolrClient.query接口来查询索引数据。
样例代码
private void queryIndex(CloudSolrClient cloudSolrClient) throws SolrException { SolrQuery query = new SolrQuery(); query.setQuery("name:Luna*"); try { QueryResponse response = cloudSolrClient.query(query); SolrDocumentList docs = response.getResults(); LOG.info("Query wasted time : {}ms", response.getQTime()); LOG.info("Total doc num : {}", docs.getNumFound()); for (SolrDocument doc : docs) { LOG.info("doc detail : " + doc.getFieldValueMap()); } } catch (SolrServerException e) { LOG.error("Failed to query document", e); throw new SolrException("Failed to query document"); } catch (IOException e) { LOG.error("Failed to query document", e); throw new SolrException("Failed to query document"); } catch (Exception e) { LOG.error("Failed to query document", e); throw new SolrException("unknown exception"); } }
删除Doc
删除Doc
功能简介
通过调用cloudSolrClient.deleteByQuery方法删除指定匹配的索引数据。
代码样例
private void removeIndex(CloudSolrClient cloudSolrClient) throws SolrException { try { cloudSolrClient.deleteByQuery("*:*"); cloudSolrClient.commit(); LOG.info("Success to delete index"); } catch (SolrServerException | IOException e){ LOG.error("Failed to remove document", e); throw new SolrException("Failed to remove document"); } }