如何使用SolrJ获取solr服务器中所有核心的列表
我们使用Solr进行搜索,并将数据分片到多个核心。 我们每周有一个核心数据,因此我们每周都会动态创建和删除核心。
如何查询solr服务器以获取其所有核心的列表? JavaDoc说我可以使用coreAdminHandler.getCoreContainer().getCoreNames()
,但我不知道如何构建coreAdminHandler对象。
对http://localhost:8983/solr/admin/cores?action=STATUS
(当然替换您自己的主机/端口)的请求将返回所有核心。
如你所知使用SolrJ ,我就是这样做的:
// Solr server instance CommonsHttpSolrServer solrServer = ...; // Request core list CoreAdminRequest request = new CoreAdminRequest(); request.setAction(CoreAdminAction.STATUS); CoreAdminResponse cores = request.process(solrServer); // List of the cores List coreList = new ArrayList (); for (int i = 0; i < cores.getCoreStatus().size(); i++) { coreList.add(cores.getCoreStatus().getName(i)); }
只是在上面的代码示例中添加了一个更新,因为Solr 4已经弃用了几个位。以下代码适用于Solr 6.1.0。
package <...>.<...>.<...>; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.request.CoreAdminRequest; import org.apache.solr.client.solrj.response.CoreAdminResponse; import org.apache.solr.common.params.CoreAdminParams.CoreAdminAction; public class GetCores { static String SOLR_URL = "http://...:8983/solr/"; public static void getCores() { System.out.println("Building Solr server instance"); HttpSolrClient solrClient=new HttpSolrClient.Builder(SOLR_URL).build(); System.out.println("Requesting core list"); CoreAdminRequest request = new CoreAdminRequest(); request.setAction(CoreAdminAction.STATUS); CoreAdminResponse cores=null; try { cores = request.process(solrClient); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println(" Listing cores"); List coreList = new ArrayList (); for (int i = 0; i < cores.getCoreStatus().size(); i++) { coreList.add(cores.getCoreStatus().getName(i)); } System.out.println(coreList.get(0)+" is the first core"); } }