Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
@algolia/cli
Advanced tools
A Node CLI tools for manipulating data. Handy for day-to-day Algolia SE work.
A Node CLI tool that makes it easy to perform common data manipulations and interactions with your Algolia app or indices.
npm install -g @algolia/cli
algolia <COMMAND NAME> [OPTIONS]
📌$ algolia --help
$ algolia --version
$ algolia interactive
$ algolia search -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -q <query> -p <searchParams> -o <outputPath>
$ algolia import -s <sourceFilepath> -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -b <batchSize> -t <transformationFilepath> -m <maxconcurrency> -p <csvToJsonParams>
$ algolia export -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -o <outputPath> -p <algoliaParams>
$ algolia getsettings -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName>
$ algolia setsettings -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -s <sourceFilepath> -p <setSettingsParams>
$ algolia addrules -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -s <sourceFilepath> -p <batchRulesParams>
$ algolia exportrules -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -o <outputPath>
$ algolia addsynonyms -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -s <sourceFilepath> -p <batchSynonymsParams>
$ algolia exportsynonyms -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -o <outputPath>
$ algolia transferindex -a <sourcealgoliaAppId> -k <sourcealgoliaApiKey> -n <sourcealgoliaIndexName> -d <destinationAlgoliaAppId> -y <destinationAlgoliaApiKey> -i <destinationIndexName> -t <transformationFilepath> -e <true|false>
$ algolia transferindexconfig -a <sourcealgoliaAppId> -k <sourcealgoliaApiKey> -n <sourcealgoliaIndexName> -d <destinationAlgoliaAppId> -y <destinationAlgoliaApiKey> -i <destinationIndexName> -p <configParams> -e <true|false>
$ algolia deleteindicespattern -a <algoliaAppId> -k <algoliaApiKey> -r '<regexp>' -x <true|false>
$ algolia transformlines -s <sourceFilepath> -o <outputPath> -t <transformationFilepath>
$ algolia examples
See also additional examples.
--help
Get basic usage info for all provided CLI scripts.
algolia --help
or
algolia -h
--version
Get version info for npm package.
algolia --version
or
algolia -v
interactive
Use Algolia CLI in interactive mode. Get command and argument prompts.
algolia interactive
search
Search an Algolia index.
algolia search -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -q <query> -p <searchParams> -o <outputPath>
<algoliaAppId>
| Required<algoliaApiKey>
| Required<algoliaIndexName>
| Required<query>
| Optional | Search query string to send to Algolia index. Defaults to ''
.<searchParams>
| Optional | JSON params to be passed to Algolia .search()
method.<outputPath>
| Optional | Local path where search results file will be saved.<outputPath>
is provided, command will simply console.log() the response.<outputPath>
is provided, command will write a JSON file to that location.<outputPath>
path must include file name.import
Import JSON or CSV data into Algolia index, from a file or directory of files.
You may also optionally apply custom transformations to each object indexed. CSV files will automatically be converted to JSON before transformations are applied.
Will handle arbitrarily large files without performance issues.
algolia import -s <sourceFilepath> -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -b <batchSize> -t <transformationFilepath> -m <maxConcurrency> -p <csvToJsonParams>
<sourceFilepath>
| Required | Path to a JSON or CSV file, or to a directory of such files.<algoliaAppId>
| Required<algoliaApiKey>
| Required<algoliaIndexName>
| Required<batchSize>
| Optional | Number of JSON objects to be included in each batch for indexing. Default is 5000
.<transformationFilepath>
| Optional | The path to any file that exports a function which (1) takes 2 arguments; an object and a callback, then (2) ends by calling said callback with the 2 arguments null
and <YOUR_TRANSFORMED_OBJECT>
.<maxConcurrency>
| Optional | Maximum number of concurrent filestreams to process. Default is 2
.<csvToJsonParams>
| Optional | Stringified Parser parameters object passed to csvtojson module.See transformations/example-transformations.js
for an extensive JSON object transformation example.
Simple transformation file example:
module.exports = (data,cb) => {
try {
const record = Object.assign({}, data);
record.objectID = data.product_id;
record.score = Math.floor(Math.random() * 100);
record.formattedNumber = parseInt(data.integer_formatted_as_string, 10);
cb(null, record);
} catch (e) {
console.log('Transformation error:', e.message, e.stack);
throw e;
}
}
<sourceFilepath>
may target a file or a directory of files..csv
extension.<transformationFilepath>
requires a path to a transformation file. See example file..DS_Store
, log files, etc. as they will throw an error..csv
.<batchSize>
is explicitly provided, command will try to determine optimal batch size by estimating average record size, estimating network speed, and calculating a size that should work well given the concurrency.AlgoliaSearchRequestTimeoutError
error, this means a batch of records failed to import. This typically occurs when attempting to import too much data over too slow a network connection. Command will automatically attempt to reduce <batchSize>
to compensate, and re-try. If issues persist, consider reducing <maxConcurrency>
and/or <batchSize>
.High memory usage
warning, it means the process is consuming a very high percentage of the estimated system heap allocation for the node process. Command will automatically attempt to reduce <batchSize>
to compensate. If issues persist, consider reducing <maxConcurrency>
and/or <batchSize>
.export
Download all JSON records from a specific Algolia index.
algolia export -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -o <outputPath> -p <algoliaParams>
<algoliaAppId>
| Required<algoliaApiKey>
| Required<algoliaIndexName>
| Required<outputPath>
| Optional | Path to an existing local directory where output files will be saved (filenames are autogenerated). If no output path is provided, defaults to current working directory.<algoliaParams>
| Optional | JSON Search params object passed to browseAll()
method.<outputPath>
must be a directory.getsettings
Get settings for a specific Algolia index.
algolia getsettings -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName>
<algoliaAppId>
| Required<algoliaApiKey>
| Required<algoliaIndexName>
| Required$ algolia getsettings -a EXAMPLE_APP_ID -k EXAMPLE_API_KEY -n EXAMPLE_INDEX_NAME > ~/Desktop/EXAMPLE_FILE_NAME.json
setsettings
Set settings for a specific Algolia index.
algolia setsettings -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -s <sourceFilepath> -p <setSettingsParams>
<algoliaAppId>
| Required<algoliaApiKey>
| Required<algoliaIndexName>
| Required<sourceFilepath>
| Required | Path to a JSON file containing a settings object.<setSettingsParams>
| Optional | JSON object containing options passed to setSettings()
method.module.exports = {
minWordSizefor1Typo: 4,
minWordSizefor2Typos: 8,
hitsPerPage: 20,
maxValuesPerFacet: 100,
version: 2,
attributesToIndex: null,
numericAttributesToIndex: null,
attributesToRetrieve: null,
unretrievableAttributes: null,
optionalWords: null,
attributesForFaceting: null,
attributesToSnippet: null,
attributesToHighlight: null,
paginationLimitedTo: 1000,
attributeForDistinct: null,
exactOnSingleWordQuery: 'attribute',
ranking:
[ 'typo',
'geo',
'words',
'filters',
'proximity',
'attribute',
'exact',
'custom' ],
customRanking: null,
separatorsToIndex: '',
removeWordsIfNoResults: 'none',
queryType: 'prefixLast',
highlightPreTag: '<em>',
highlightPostTag: '</em>',
snippetEllipsisText: '',
alternativesAsExact: [ 'ignorePlurals', 'singleWordSynonym' ]
};
'{"forwardToReplicas":true}'
addrules
Import a local JSON file of query rules to an Algolia index.
algolia addrules -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -s <sourceFilepath> -p <batchRulesParams>
<algoliaAppId>
| Required<algoliaApiKey>
| Required<algoliaIndexName>
| Required<sourceFilepath>
| Required | Path to a JSON file containing an array of query rule objects.<batchRulesParams>
| Optional | JSON object containing options passed to batchRules()
method.exportrules
Download all query rules from a specific Algolia index.
algolia exportrules -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -o <outputPath>
<algoliaAppId>
| Required<algoliaApiKey>
| Required<algoliaIndexName>
| Required<outputPath>
| Optional | Local path where query rules file will be saved. If no output path is provided, defaults to current working directory.<outputPath>
path must include file name.addsynonyms
Import a local CSV or JSON file of synonyms to an Algolia index. Some public synonym files can be downloaded from this repository. Disclaimer: These are not intended to be all encompassing -- edits may be needed for your use case.
Note that if importing a CSV file, the expected format is file with no headers and with each row of comma-separated values being a group of synonyms for each other. For more information, read our documentation on the topic.
algolia addsynonyms -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -s <sourceFilepath> -p <batchSynonymsParams>
<algoliaAppId>
| Required<algoliaApiKey>
| Required<algoliaIndexName>
| Required<sourceFilepath>
| Required | Path to a CSV or JSON file containing an array of synonyms objects.<batchSynonymsParams>
| Optional | JSON object containing options passed to batchSynonyms()
method.exportsynonyms
Download all synonyms from a specific Algolia index.
algolia exportsynonyms -a <algoliaAppId> -k <algoliaApiKey> -n <algoliaIndexName> -o <outputPath>
<algoliaAppId>
| Required<algoliaApiKey>
| Required<algoliaIndexName>
| Required<outputPath>
| Optional | Local path where synonyms file will be saved. If no output path is provided, defaults to current working directory.<outputPath>
path must include file name.transferindex
Transfer all data and settings (including synonyms and query rules) from one Algolia app/index to another.
algolia transferindex -a <sourceAlgoliaAppId> -k <sourceAlgoliaApiKey> -n <sourceAlgoliaIndexName> -d <destinationAlgoliaAppId> -y <destinationAlgoliaApiKey> -i <destinationIndexName> -t <transformationFilepath> -e <excludeReplicas>
<sourceAlgoliaAppId>
| Required<sourceAlgoliaApiKey>
| Required<sourceAlgoliaIndexName>
| Required<destinationAlgoliaAppId>
| Required<destinationAlgoliaApiKey>
| Required<destinationIndexName>
| Optional | If no destination index name is specified, script will default to creating a new index with the same name as the source index.<transformationFilepath>
| Optional | The path to any file that exports a function which (1) takes a single object as argument, then (2) returns a transformed object.<excludeReplicas>
| Optional | This is a boolean. When true
, it will exclude the replicas
setting when copying settings to the destination index. When false
, it will copy the full settings object. Defaults to false
.Simple transformation file for transferring an index:
module.exports = (obj) => {
try {
const record = {};
record.objectID = obj.product_id;
record.score = Math.floor(Math.random() * 100);
record.formattedNumber = parseInt(obj.integer_formatted_as_string, 10);
} catch (e) {
console.log('Transformation error:', e.message, e.stack);
throw e;
}
}
transferindexconfig
Transfer an index's settings, synonyms, and query rules to another index. Works even across indices in different Algolia applications.
algolia transferindexconfig -a <sourceAlgoliaAppId> -k <sourceAlgoliaApiKey> -n <sourceAlgoliaIndexName> -d <destinationAlgoliaAppId> -y <destinationAlgoliaApiKey> -i <destinationIndexName> -p <configParams> -e <excludeReplicas>
<sourceAlgoliaAppId>
| Required<sourceAlgoliaApiKey>
| Required<sourceAlgoliaIndexName>
| Required<destinationAlgoliaAppId>
| Required<destinationAlgoliaApiKey>
| Required<destinationIndexName>
| Optional | If no destination index name is specified, script will default to targetting an existing index with the same name as the source index.<configParams>
| Optional | JSON object containing one or both of the following two properties: batchSynonymsParams
and batchRulesParams
. Each of those property values may contain a parameters object to be passed to the batchSynonyms and batchRules respectively.<excludeReplicas>
| Optional | This is a boolean. When true
, it will exclude the replicas
setting when copying settings to the destination index. When false
, it will copy the full settings object. Defaults to false
.forwardToReplicas
, replaceExistingSynonyms
, and clearExistingRules
params will default to false, unless you specify <configParams>
.deleteindicespattern
Delete multiple indices at once (main or replica indices included) using a regular expression.
algolia deleteindicespattern -a <algoliaAppId> -k <algoliaApiKey> -r '<regexp>' -x <dryrun>
<algoliaAppId>
| Required<algoliaApiKey>
| Required<regexp>
| Required | Provide regexes without the leading and trailing slashes<dryrun>
| Required | This is a boolean. When true
it will run in dry mode and show what will be deleted, when false
it will really delete the indices. Careful!algolia deleteindicespattern -a someAppId -k someApiKey -r '^staging__' -x false
This will delete all indices of the application that are starting with "staging__".
transformlines
Transform a file line-by-line.
algolia transformlines -s <sourceFilepath> -o <outputPath> -t <transformationFilepath>
<sourceFilepath>
| Required | Path to a single .js
or .json
file OR a directory of such files.<outputPath>
| Optional | Path to an existing local directory where output files will be saved (saved output filenames will match corresponding source filenames). If no output path is provided, defaults to current working directory.<transformationFilepath>
| Optional | Path to file that exports a function which (1) takes a line string, and (2) returns a transformed line string.Mapping each line of input file to a new output file.
Originally designed for converting .json-seq
files to regular comma separated JSON arrays, in order to index them with the import
cli tool.
Let's say we had this source JSON file:
[
{"id":1,"color":"blue"},
{"id":2,"color":"red"},
{"id":3,"color":"green"}
]
and we wanted to filter out any objects that didn't have a "color" value of "blue". In this case, our transformations function could be something like this:
module.exports = (line) => {
if (line === '[' || line === ']') {
return line;
} else if (line.includes('"color":"blue"')) {
return line;
} else {
return '\n';
}
}
<outputPath>
must be a directory.transformlines
command without providing optional <transformationFilepath>
param will cause it to assume it's parsing a .json-seq
file; thus, it will apply the defaultLineTransformation
method in transformLines.js
to each line. This checks each line for the ASCII Record Separator character \u001e
and replaces it with a ,
. It will also cause it to enclose the whole file in "[" and "]" square brackets to make it a valid JS array. Providing a custom transformation method via the optional <transformationFilepath>
param will make it exclusively run your transformation function instead of the default one (and in this case it will also omit adding enclosing square brackets).examples
Display command usage examples.
algolia examples
$ algolia --help
$ algolia --version
$ algolia interactive
$ algolia search -a EXAMPLE_APP_ID -k EXAMPLE_API_KEY -n EXAMPLE_INDEX_NAME -q 'example query' -p '{"facetFilters":["category:book"]}' -o ~/Desktop/results.json
$ algolia import -s ~/Desktop/example_source_directory/ -a EXAMPLE_APP_ID -k EXAMPLE_API_KEY -n EXAMPLE_INDEX_NAME -b 5000 -t ~/Desktop/example_transformations.js -m 4 -p '{"delimiter":[":"]}'
$ algolia export -a EXAMPLE_APP_ID -k EXAMPLE_API_KEY -n EXAMPLE_INDEX_NAME -o ~/Desktop/example_output_folder/ -p '{"filters":["category:book"]}'
$ algolia getsettings -a EXAMPLE_APP_ID -k EXAMPLE_API_KEY -n EXAMPLE_INDEX_NAME
$ algolia setsettings -a EXAMPLE_APP_ID -k EXAMPLE_API_KEY -n EXAMPLE_INDEX_NAME -s ~/Desktop/example_settings.json -p '{"forwardToReplicas":true}'
$ algolia addrules -a EXAMPLE_APP_ID -k EXAMPLE_API_KEY -n EXAMPLE_INDEX_NAME -s ~/Desktop/example_rules.json -p '{"forwardToReplicas":false,"clearExistingRules":true}'
$ algolia exportrules -a EXAMPLE_APP_ID -k EXAMPLE_API_KEY -n EXAMPLE_INDEX_NAME -o ~/Desktop/example_rules.json
$ algolia addsynonyms -a EXAMPLE_APP_ID -k EXAMPLE_API_KEY -n EXAMPLE_INDEX_NAME -s ~/Desktop/example_synonyms.json -p '{"forwardToReplicas":true,"clearExistingSynonyms":true}'
$ algolia exportsynonyms -a EXAMPLE_APP_ID -k EXAMPLE_API_KEY -n EXAMPLE_INDEX_NAME -o ~/Desktop/example_synonyms.json
$ algolia transferindex -a EXAMPLE_SOURCE_APP_ID -k EXAMPLE_SOURCE_API_KEY -n EXAMPLE_SOURCE_INDEX_NAME -d EXAMPLE_DESTINATION_APP_ID -y EXAMPLE_DESTINATION_API_KEY -i EXAMPLE_DESTINATION_INDEX_NAME -t ~/Desktop/example_transformations.js -e true
$ algolia transferindexconfig -a EXAMPLE_SOURCE_APP_ID -k EXAMPLE_SOURCE_API_KEY -n EXAMPLE_SOURCE_INDEX_NAME -d EXAMPLE_DESTINATION_APP_ID -y EXAMPLE_DESTINATION_API_KEY -i EXAMPLE_DESTINATION_INDEX_NAME -p '{"batchSynonymsParams":{"forwardToReplicas":true,"replaceExistingSynonyms":true},"batchRulesParams":{"forwardToReplicas":true,"clearExistingRules":true}}' -e true
$ algolia deleteindicespattern -a EXAMPLE_APP_ID -k EXAMPLE_API_KEY -r '^regex' -x true
$ algolia transformlines -s ~/Desktop/example_source_file.json -o ~/Desktop/example_output_folder/ -t ~/Desktop/example_transformations.js
$ algolia examples
yarn install
.env
file in project root and assign environment variables as listed below.ALGOLIA_TEST_APP_ID
ALGOLIA_TEST_API_KEY
ALGOLIA_TEST_INDEX_NAME
ALGOLIA_TEST_ALT_APP_ID
ALGOLIA_TEST_ALT_API_KEY
node index.js <command_name> [options]
to test various commands/options.yarn test
to run full test suite locallyyarn test:unit
to run unit test suite onlyyarn test:unit:watch
to run unit test suite with interactive --watch
flagyarn test:integration
to run integration test suite onlyyarn lint
to run eslintyarn lint:fix
to run eslint with --fix flagFAQs
A Node CLI tools for manipulating data. Handy for day-to-day Algolia SE work.
The npm package @algolia/cli receives a total of 1,516 weekly downloads. As such, @algolia/cli popularity was classified as popular.
We found that @algolia/cli demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 61 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.