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");
}
}