UNPKG

solr-client

Version:

A Solr client library for indexing, adding, deleting, committing, optimizing and searching documents within an Apache Solr installation (version>=3.2)

589 lines (588 loc) 22.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Collection = void 0; class Collection { constructor() { this.parameters = []; } /** * Set a new parameter * Since all possibilities provided by Solr are not available in the `Collection` object, `set()` is there to fill this gap. * * @param {String} parameter - string, special characters have to be correctly encoded or the request will fail. * * @return {Collection} - allow chaining * @api public */ set(parameter) { const self = this; this.parameters.push(parameter); return self; } /** * Create a new Collection * * @param {Object} options - Set of options for creating a new collection * @param {String} name - The name of the collection to be created * @param {String} [routerName] - The router name that will be used. Default is 'compositeId'. 'implicit' is the only other valid option. * @param {Number} [numShards] - Number of shards to be created as part of the collection. Required when using 'compositeId' router. * @param {String|Array} [shards] - A comma separated list of shard names, or an array of shard names. Required if using 'implicit' router. * @param {Number} [replicationFactor] - The number of replicas to be created for each shard. * @param {Number} [maxShardsPerNode] - Sets a limit on the number of replicas CREATE will spread to each node. * @param {String|Array} [createNodeSet] - Defines the nodes to spread the shards/ replicas across. Comma separated list of node names, or an array of node names. * @param {Boolean} [createNodeSetShuffle] - Controls whether or not the shard-replicas created will be assigned to the nodes in createNodeSet in a sequential or shuffled order. * @param {String} [collectionConfigName] - Defines name of the configurations to use for this collection. Must already be stored in ZooKeeper. * @param {String} [routerField] - If specified, router will look at the value of the field in an input document to compute the hash and identify a shard instead of looking at the uniqueKey field. * @param {Boolean} [autoAddReplicas] - When set to true, enables auto addition of replicas on shared file systems. * @param {String} [async] - Request ID to track this action which will be processed asynchonously. * @return {Collection} * @api public */ create(options) { const self = this; this.parameters.push('action=CREATE'); if (options.name) { this.parameters.push('name=' + options.name); } if (options.routerName) { this.parameters.push('router.name=' + options.routerName); } if (options.numShards !== undefined) { this.parameters.push('numShards=' + options.numShards); } if (options.shards !== undefined) { if (typeof options.shards === 'string') { this.parameters.push('shards=' + options.shards); } else { this.parameters.push('shards=' + options.shards.join()); } } if (options.replicationFactor !== undefined) { this.parameters.push('replicationFactor=' + options.replicationFactor); } if (options.maxShardsPerNode !== undefined) { this.parameters.push('maxShardsPerNode=' + options.maxShardsPerNode); } if (options.createNodeSet !== undefined) { if (typeof options.createNodeSet === 'string') { this.parameters.push('createNodeSet=' + options.createNodeSet); } else { this.parameters.push('createNodeSet=' + options.createNodeSet.join()); } } if (options.createNodeSetShuffle !== undefined) { this.parameters.push('createNodeSet.shuffle=' + options.createNodeSetShuffle); } if (options.collectionConfigName) { this.parameters.push('collection.configName=' + options.collectionConfigName); } if (options.routerField) { this.parameters.push('router.field=' + options.routerField); } if (options.autoAddReplicas !== undefined) { this.parameters.push('autoAddReplicas=' + options.autoAddReplicas); } if (options.async) { this.parameters.push('async=' + options.async); } return self; } /** * Reload a Collection * * @param {String} name - Name of the Collection to be reloaded * * @return {Collection} * @api public */ reload(name) { const self = this; this.parameters.push('action=RELOAD'); if (name) { this.parameters.push('name=' + name); } return self; } /** * Split a shard * * @param {Object} options - Options for splitting the shard * @param {String} collection - Name of the Collection that includes the shard to be split * @param {String} shard - Name of the shard to be split * @param {String|Array} [ranges] - Comma separated list of hash ranges in hexadecimal. If an array is supplied, it will be joined with commas. * @param {String} [splitKey] - The key to use for splitting the index * @param {String} [async] - Request ID to track this action, processed asynchonously. * * @return {Collection} * @api public */ splitShard(options) { const self = this; this.parameters.push('action=SPLITSHARD'); if (options.collection) { this.parameters.push('collection=' + options.collection); } if (options.shard) { this.parameters.push('shard=' + options.shard); } if (options.ranges !== undefined) { if (typeof options.ranges === 'string') { this.parameters.push('ranges=' + options.ranges); } else { this.parameters.push('ranges=' + options.ranges.join()); } } if (options.splitKey) { this.parameters.push('split.key=' + options.splitKey); } if (options.async) { this.parameters.push('async=' + options.async); } return self; } /** * Create a shard * Can only be used for collections that use the 'implicit' router. Use SPLITSHARD for the `compositId` router. * * @param {Object} options - Options for creating the shard * @param {String} collection - Name of the Collection where the shard should be created * @param {String} shard - Name of the shard to be created * * @return {Collection} * @api public */ createShard(options) { const self = this; this.parameters.push('action=CREATESHARD'); if (options.collection) { this.parameters.push('collection=' + options.collection); } if (options.shard) { this.parameters.push('shard=' + options.shard); } return self; } /** * Delete a shard * * @param {Object} options - Options for deleting the shard * @param {String} collection - Name of the Collection that includes the shard to be deleted * @param {String} shard - Name of the shard to be deleted * * @return {Collection} * @api public */ deleteShard(options) { const self = this; this.parameters.push('action=DELETESHARD'); if (options.collection) { this.parameters.push('collection=' + options.collection); } if (options.shard) { this.parameters.push('shard=' + options.shard); } return self; } /** * Create/ Modify alias for a collection * * @param {Object} options - Options for creation of the collection alias. * @param {String} name - The alias name to be created. * @param {String|Array} collections - A comma separated list of collections to be aliased. If an array is provided, it will be joined by commas. * * @return {Collection} * @api public */ createAlias(options) { const self = this; this.parameters.push('action=CREATEALIAS'); if (options.name) { this.parameters.push('name=' + options.name); } if (options.collections !== undefined) { if (typeof options.collections === 'string') { this.parameters.push('collections=' + options.collections); } else { this.parameters.push('collections=' + options.collections.join()); } } return self; } /** * Delete a collection alias * * @param {String} name - Name of the alias to delete * * @return {Collection} * @api public */ deleteAlias(name) { const self = this; this.parameters.push('action=DELETEALIAS'); if (name) { this.parameters.push('name=' + name); } return self; } /** * Delete a Collection * * @param {String} name - The name of the collection to be deleted * * @return {Collection} * @api public */ delete(name) { const self = this; this.parameters.push('action=DELETE'); if (name) { this.parameters.push('name=' + name); } return self; } /** * Delete a replica * * @param {Object} options - Options for deleting the replica * @param {String} collection - Name of the Collection that includes the replica to be deleted * @param {String} shard - Name of the shard that includes the replica to be deleted * @param {String} replica - The name of the replica to remove. * @param {Boolean} [onlyIfDown] - If true, deletion will only execute if the replica is down/ not active. * * @return {Collection} * @api public */ deleteReplica(options) { const self = this; this.parameters.push('action=DELETEREPLICA'); if (options.collection) { this.parameters.push('collection=' + options.collection); } if (options.shard) { this.parameters.push('shard=' + options.shard); } if (options.replica) { this.parameters.push('replica=' + options.replica); } if (options.onlyIfDown !== undefined) { this.parameters.push('onlyIfDown=' + options.onlyIfDown); } return self; } /** * Add replica * * @param {Object} options - Options for adding the replica * @param {String} collection - Name of the Collection * @param {String} shard - Name of the shard to which the replica will be added * @param {String} [route] - If the exact shard name is not known, route can be passed and the system will identify the shard. Ignored if shard is specified. * @param {String} [node] - Name of the node where the replica should be created. * @param {String} [async] - Request ID to track this action, which will be processed asynchronously. * * @return {Collection} * @api public */ addReplica(options) { const self = this; this.parameters.push('action=ADDREPLICA'); if (options.collection) { this.parameters.push('collection=' + options.collection); } if (options.shard) { this.parameters.push('shard=' + options.shard); } if (options.route) { this.parameters.push('_route_=' + options.route); } if (options.node) { this.parameters.push('node=' + options.node); } if (options.async) { this.parameters.push('async=' + options.async); } return self; } /** * Cluster Properties * * @param {Object} options - Options for cluster properties * @param {String} name - Name of the property. Two supported properties are 'urlScheme' and 'autoAddReplicas.' Others will be rejected by Solr. * @param {String} val - Value of the property. If the value is empty or null, the property is unset. * * @return {Collection} * @api public */ clusterProp(options) { const self = this; this.parameters.push('action=CLUSTERPROP'); if (options.name) { this.parameters.push('name=' + options.name); } if (options.val !== undefined) { this.parameters.push('val=' + options.val); } return self; } /** * Migrate documents to another collection * * @param {Object} options - Options for document migration * @param {String} collection - Name of the source collection from which documents will be split. * @param {String} targetCollection - Name of the target collection to which documents will be migrated. * @param {String} splitKey - The routing key prefix. * @param {Number} [forwardTimeout] - The timeout, in seconds, until which write requests made to the source collection for the given split.key will be forwarded to the target shard. Default is 60 seconds. * @param {String} [async] - Request ID to track this action which will be processed asynchronously. * * @return {Collection} * @api public */ migrate(options) { const self = this; this.parameters.push('action=MIGRATE'); if (options.collection) { this.parameters.push('collection=' + options.collection); } if (options.targetCollection) { this.parameters.push('target.collection=' + options.targetCollection); } if (options.splitKey) { this.parameters.push('split.key=' + options.splitKey); } if (options.forwardTimeout !== undefined) { this.parameters.push('forward.timeout=' + options.forwardTimeout); } if (options.async) { this.parameters.push('async=' + options.async); } return self; } /** * Add Role * * @param {Object} options - Options for adding the role * @param {String} role - Name of role. Only current supported role is 'overseer' * @param {String} node - Name of the node. * * @return {Collection} * @api public */ addRole(options) { const self = this; this.parameters.push('action=ADDROLE'); if (options.role) { this.parameters.push('role=' + options.role); } if (options.node) { this.parameters.push('node=' + options.node); } return self; } /** * Remove Role * Undo roles assigned using ADDROLE operation * * @param {Object} options - Options for removing the role * @param {String} role - Name of role. Only current supported role is 'overseer' * @param {String} node - Name of the node. * * @return {Collection} * @api public */ removeRole(options) { const self = this; this.parameters.push('action=REMOVEROLE'); if (options.role) { this.parameters.push('role=' + options.role); } if (options.node) { this.parameters.push('node=' + options.node); } return self; } /** * Overseer status and statistics * * @return {Collection} * @api public */ overseerStatus() { const self = this; this.parameters.push('action=OVERSEERSTATUS'); return self; } /** * Cluster status * * @return {Collection} * @api public */ clusterStatus() { const self = this; this.parameters.push('action=CLUSTERSTATUS'); return self; } /** * Request status * request the status of an already submitted Asynchronous Collection API call. * * @param {String} requestid - User-defined request ID from the submitted API call. A value of '-1' will clear the stored states for the already completed/ failed tasks. * * @return {Collection} * @api public */ requestStatus(requestid) { const self = this; this.parameters.push('action=REQUESTSTATUS'); if (requestid) { this.parameters.push('requestid=' + requestid); } return self; } /** * List collections * * @return {Collection} * @api public */ list() { const self = this; this.parameters.push('action=LIST'); return self; } /** * Add Replica property * * @param {Object} options - Options for replica property * @param {String} collection - Name of collection this replica belongs to. * @param {String} shard - Name of the shard the replica belongs to. * @param {String} replica - The name of the replica * @param {String} property - The property to add * @param {String} propertyValue - The value to assign to the property. * @param {Boolean} [shardUnique] - If set to true, then setting this property in one replica will remove the property from all other replicas in that shard. * * @return {Collection} * @api public */ addReplicaProp(options) { const self = this; this.parameters.push('action=ADDREPLICAPROP'); if (options.collection) { this.parameters.push('collection=' + options.collection); } if (options.shard) { this.parameters.push('shard=' + options.shard); } if (options.replica) { this.parameters.push('replica=' + options.replica); } if (options.property) { this.parameters.push('property=' + options.property); } if (options.propertyValue !== undefined) { this.parameters.push('property.value=' + options.propertyValue); } if (options.shardUnique !== undefined) { this.parameters.push('shardUnique=' + options.shardUnique); } return self; } /** * Delete Replica property * * @param {Object} options - Options for replica property * @param {String} collection - Name of collection this replica belongs to. * @param {String} shard - Name of the shard the replica belongs to. * @param {String} replica - The name of the replica * @param {String} property - The property to remove * * @return {Collection} * @api public */ deleteReplicaProp(options) { const self = this; this.parameters.push('action=DELETEREPLICAPROP'); if (options.collection) { this.parameters.push('collection=' + options.collection); } if (options.shard) { this.parameters.push('shard=' + options.shard); } if (options.replica) { this.parameters.push('replica=' + options.replica); } if (options.property) { this.parameters.push('property=' + options.property); } return self; } /** * Balance a property * * @param {Object} options - Options for replica property * @param {String} collection - Name of collection to balance the property in. * @param {String} property - The property to balance * @param {Boolean} [onlyActiveNodes] - Default is true. When true, property is instantiated on active nodes only. If false, inactive nodes will be included. * @param {Boolean} [shardUnique] - If set to true, then setting this property in one replica will r emove the property from all other replicas in that shard. * * @return {Collection} * @api public */ balanceShardUnique(options) { const self = this; this.parameters.push('action=BALANCESHARDUNIQUE'); if (options.collection) { this.parameters.push('collection=' + options.collection); } if (options.property) { this.parameters.push('property=' + options.property); } if (options.onlyActiveNodes !== undefined) { this.parameters.push('onlyActiveNodes=' + options.onlyActiveNodes); } if (options.shardUnique !== undefined) { this.parameters.push('shardUnique=' + options.shardUnique); } return self; } /** * Rebalance leaders * * @param {Object} options - Options for replica property * @param {String} collection - Name of collection to rebalance preferredLeaders on. * @param {Number} [maxAtOnce] - The maximum number of reassignments to have queue up at once. * @param {Number} [maxWaitSeconds] - Timeout value (seconds) when waiting for leaders to be reassigned. Default is 60. * * @return {Collection} * @api public */ rebalanceLeaders(options) { const self = this; this.parameters.push('action=REBALANCELEADERS'); if (options.collection) { this.parameters.push('collection=' + options.collection); } if (options.maxAtOnce !== undefined) { this.parameters.push('maxAtOnce=' + options.maxAtOnce); } if (options.maxWaitSeconds !== undefined) { this.parameters.push('maxWaitSeconds=' + options.maxWaitSeconds); } return self; } /** * Build a querystring with the array of `this.parameters`. * * @return {String} * @api private */ build() { return this.parameters.join('&'); } } exports.Collection = Collection; //# sourceMappingURL=collection.js.map