Ответ 1
Запрос http://localhost:8983/solr/admin/cores?action=STATUS
(замените свой собственный хост/порт, конечно) вернет все ядра.
Мы используем 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<String> coreList = new ArrayList<String>();
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<String> coreList = new ArrayList<String>();
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");
}
}