18

検索にはSolrを使用しており、複数のコアにわたってデータをシャーディングしています。週に1つのコアのデータがあるため、毎週コアを動的に作成および削除しています。

solrサーバーにすべてのコアのリストを照会するにはどうすればよいですか?JavaDocにはcoreAdminHandler.getCoreContainer().getCoreNames()、を使用できると書かれていますが、coreAdminHandlerオブジェクトを作成する方法がわかりません。

4

3 に答える 3

26

http://localhost:8983/solr/admin/cores?action=STATUS(もちろん、自分のホスト/ポートを置き換える) を要求すると、すべてのコアが返されます。

于 2011-07-12T17:49:42.020 に答える
21

あなたが尋ねたように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));
}
于 2012-04-06T12:50:01.903 に答える
3

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");    
    }       
}
于 2016-09-17T05:00:44.710 に答える