public ResponseHeader CreateCollection(
            string collection,
            string routerName         = null,
            int?numShards             = null,
            string configName         = null,
            string shards             = null,
            int?maxShardsPerNode      = null,
            int?replicationFactor     = null,
            string createNodeSet      = null,
            bool?createNodeSetShuffle = null,
            string rooterField        = null,
            IDictionary <string, string> coreProperties = null,
            bool?autoAddReplicas = null,
            string rule          = null,
            string snitch        = null)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "create")
                             .AddRequired("name", collection)
                             .AddOptional("router.name", routerName)
                             .AddOptional("numShards", numShards)
                             .AddOptional("collection.configName", configName)
                             .AddOptional("shards", shards)
                             .AddOptional("maxShardsPerNode", maxShardsPerNode.ToString())
                             .AddOptional("replicationFactor", replicationFactor)
                             .AddOptional("createNodeSet", createNodeSet)
                             .AddOptional("createNodeSet.shuffle", createNodeSetShuffle)
                             .AddOptional("rooter.field", rooterField)
                             .AddOptional(CORE_PROPERTY_KEY_PREFIX, coreProperties)
                             .AddOptional("autoAddReplicas", autoAddReplicas)
                             .AddOptional("rule", rule)
                             .AddOptional("snitch", snitch);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public ResponseHeader DeleteAlias(string name)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "DELETEALIAS")
                             .AddRequired("name", name);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public ResponseHeader DeleteCollection(string collection)
        {
            var solrPapams = new SolrParams()
                             .AddRequired("action", "delete")
                             .AddRequired("name", collection);

            return(SendAndParseHeader(AdminHandler, solrPapams));
        }
        public ResponseHeader RemoveRole(
            string role,
            string node)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "REMOVEROLE")
                             .AddRequired("role", role)
                             .AddRequired("node", node);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public ResponseHeader CreateAlias(
            string name,
            string collections)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "CREATEALIAS")
                             .AddRequired("name", name)
                             .AddRequired("collections", collections);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public OverseerStatusClass OverseerStatus()
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "OVERSEERSTATUS")
                             .AddRequired("wt", "json");

            var overseerStatusJsonString = SendRaw(AdminHandler, solrParams);
            var overseerStatus           = OverseerStatusClass.Parse(overseerStatusJsonString);

            return(overseerStatus);
        }
        public List <string> ListCollections()
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "list");

            var results = Send(AdminHandler, solrParams);

            var paramNodes = results.XPathSelectElements("response/arr[@name='collections']/str");

            return(paramNodes.Select(n => n.Value).ToList());
        }
        public ResponseHeader ClusterPropertySetDelete(
            string name,
            string value = null)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "CLUSTERPROP")
                             .AddRequired("name", name)
                             .AddOptional("value", value);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public ResponseHeader CreateCollection(string collection, string routerName = null, int?numShards = null, string configName = null, string shards = null, int?maxShardsPerNode = null)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "create")
                             .AddRequired("name", collection)
                             .AddOptional("router.name", routerName)
                             .AddOptional("numShards", numShards.ToString())
                             .AddOptional("shards", shards)
                             .AddOptional("maxShardsPerNode", maxShardsPerNode.ToString());

            return(SendAndParseHeader(adminHandler, solrParams));
        }
        public ResponseHeader RebalanceLeaders(
            string collection,
            string maxAtOnce      = null,
            string maxWaitSeconds = null)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "REBALANCELEADERS")
                             .AddRequired("collection", collection)
                             .AddOptional("maxAtOnce", maxAtOnce)
                             .AddOptional("maxWaitSeconds", maxWaitSeconds);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public SolrCloudState GetClusterStatus(string collection, string shard = null, string route = null)
        {
            var solrParams = new SolrParams()
                             .AddRequired("wt", "json")
                             .AddRequired("action", "clusterstate")
                             .AddOptional("shard", shard)
                             .AddOptional("_route_", route);

            var json = SendRaw(AdminHandler, solrParams);

            var status = SolrCloudStateParser.Parse(json);

            return(status);
        }
        public ResponseHeader CreateShard(
            string collection,
            string shard,
            string createNodeSet = null,
            IDictionary <string, string> coreProperties = null)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "createshard")
                             .AddRequired("collection", collection)
                             .AddRequired("shard", shard)
                             .AddOptional("createNodeSet", createNodeSet)
                             .AddOptional(CORE_PROPERTY_KEY_PREFIX, coreProperties);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public ResponseHeader BalanceShardUnique(
            string collection,
            string property,
            bool?onlyActiveNodes = null,
            bool?shardUnique     = null)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "BALANCESHARDUNIQUE")
                             .AddRequired("collection", collection)
                             .AddRequired("property", property)
                             .AddOptional("onlyactivenodes", onlyActiveNodes)
                             .AddOptional("shardUnique", shardUnique);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public ResponseHeader DeleteReplicaProperty(
            string collection,
            string shard,
            string replica,
            string property)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "DELETEREPLICAPROP")
                             .AddRequired("collection", collection)
                             .AddRequired("shard", shard)
                             .AddRequired("replica", replica)
                             .AddRequired("property", property);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public ResponseHeader DeleteShard(
            string collection,
            string shard,
            bool?deleteInstanceDir = null,
            bool?deleteDataDir     = null,
            bool?deleteIndex       = null)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "deleteshard")
                             .AddRequired("collection", collection)
                             .AddRequired("shard", shard)
                             .AddOptional("deleteInstanceDir", deleteInstanceDir)
                             .AddOptional("deleteDataDir", deleteDataDir)
                             .AddOptional("deleteIndex", deleteIndex);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public ResponseHeader SplitShard(
            string collection,
            string shard,
            string ranges   = null,
            string splitKey = null,
            IDictionary <string, string> coreProperties = null)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "SPLITSHARD")
                             .AddRequired("collection", collection)
                             .AddRequired("shard", shard)
                             .AddOptional("ranges", ranges)
                             .AddOptional("split.key", splitKey)
                             .AddOptional(CORE_PROPERTY_KEY_PREFIX, coreProperties);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public ResponseHeader Migrate(
            string collection,
            string targetCollection,
            string splitKey,
            int?forwardTimeout = null,
            IDictionary <string, string> coreProperties = null)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "MIGRATE")
                             .AddRequired("collection", collection)
                             .AddRequired("target.collection", targetCollection)
                             .AddRequired("split.key", splitKey)
                             .AddOptional("forward.timeout", forwardTimeout)
                             .AddOptional(CORE_PROPERTY_KEY_PREFIX, coreProperties);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public ResponseHeader ModifyCollection(
            string collection,
            int?maxShardsPerNode  = null,
            int?replicationFactor = null,
            bool?autoAddReplicas  = null,
            string rule           = null,
            string snitch         = null)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "MODIFYCOLLECTION")
                             .AddRequired("collection", collection)
                             .AddOptional("maxShardsPerNode", maxShardsPerNode.ToString())
                             .AddOptional("replicationFactor", replicationFactor)
                             .AddOptional("autoAddReplicas", autoAddReplicas)
                             .AddOptional("rule", rule)
                             .AddOptional("snitch", snitch);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public ResponseHeader AddReplicaProperty(
            string collection,
            string shard,
            string replica,
            string property,
            string propertyValue,
            bool?shardUnique = null)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "ADDREPLICAPROP")
                             .AddRequired("collection", collection)
                             .AddRequired("shard", shard)
                             .AddRequired("replica", replica)
                             .AddRequired("property", property)
                             .AddRequired("property.value", propertyValue)
                             .AddOptional("shardUnique", shardUnique);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public ResponseHeader DeleteReplica(
            string collection,
            string shard,
            string replica,
            bool?deleteInstanceDir = null,
            bool?deleteDataDir     = null,
            bool?deleteIndex       = null,
            bool?onlyIfDown        = null)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "DELETEREPLICA")
                             .AddRequired("collection", collection)
                             .AddRequired("shard", shard)
                             .AddRequired("replica", replica)
                             .AddOptional("deleteInstanceDir", deleteInstanceDir)
                             .AddOptional("deleteDataDir", deleteDataDir)
                             .AddOptional("deleteIndex", deleteIndex)
                             .AddOptional("onlyIfDown", onlyIfDown);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }
        public ResponseHeader AddReplica(
            string collection,
            string shard     = null,
            string route     = null,
            string node      = null,
            bool?instanceDir = null,
            bool?dataDir     = null,
            IDictionary <string, string> coreProperties = null)
        {
            var solrParams = new SolrParams()
                             .AddRequired("action", "ADDREPLICA")
                             .AddRequired("collection", collection)
                             .AddOptional("shard", shard)
                             .AddOptional("_route_", route)
                             .AddOptional("node", node)
                             .AddOptional("instanceDir", instanceDir)
                             .AddOptional("dataDir", dataDir)
                             .AddOptional(CORE_PROPERTY_KEY_PREFIX, coreProperties);

            return(SendAndParseHeader(AdminHandler, solrParams));
        }