lrcli - the Letarette CLIlrcli is a tool for performing operations on and interacting with a Letarette installation. Most operations are performed on a specific instance, and need to be run with direct access to the index database file.
Some operations connect via NATS, and can be run from any host with access to the system NATS servers.
lrcli configurationlrcli uses a subset of the configuration environment variables that the letarette service uses, and in addition, accepts command-line arguments for specific lrcli operations.
All operations that access the database directly accept the -d <database> argument, overriding the environment setting.
lrcli can be used to search a Letarette cluster.
Run lrcli search -l 10 -p 2 docs 'animal -dog' to get page 2 of the search results from the "docs" space, matching the query "animal -dog", containing at most 10 hits per page.
There is an initial short delay before the query is executed while lrcli figures out the current sharding configuration.
Use -g 1 to make the Search Agent assume a shard size of 1 instead of waiting for the information.
Searches can also be performed interactively by running lrcli search -i docs.
The index operations all access the index db file directly, and can be run while the Letarette service is running.
lrcli index statsShows some statistics and the current stemmer settings for an index.
lrcli index checkRuns an integrity check on the index.
lrcli index compressCompresses previously uncompressed documents in the index.
lrcli index optimizePerforms step-wise index optimization by merging index b-trees. If cancelled before completion, the index will be partially optimized. Running the operation again will pick up where it left.
lrcli index rebuildCompletely rebuilds the index from all collected raw data. Since the whole rebuild is performed as one transaction, it requires about twice the index size of free disk space.
lrcli index pgsize <size>Set page size for all new index storage blobs. The default size is 16384.
lrcli index forcestemmerThe letarette service refuses to start with a different stemming config than what the index was initially created with, since this would create an inconsistent index state. To force letarette to accept the new changes (from the current environment), run lrcli index forcestemmer.
Documents can be bulk-loaded into an index from json files. This can be used to reduce the initial sync time, or to create an index without a Document Manager.
During bulk-load, documents are loaded from files containing streams of JSON objects of the following format:
{
"id": "string ID",
"title": "document title",
"text": "document text",
"date": "ISO8601 date string"
}The title or text field can be left empty.
Example file content:
{
"id": "27532073",
"title": "Love Me Do",
"date": "2019-02-23T14:15:29.120Z"
}
{
"id": "27532077",
"title": "And I Love Her",
"text": "A nice song",
"date": "2019-02-23T14:15:29.120Z"
}
{
"id": "27532078",
"title": "Help!",
"date": "2019-02-23T14:15:29.120Z"
}Note that there is no comma between each JSON object.
The source file can be gzipped. If the documents do not have IDs, lrcli load can auto-assign
IDs by using the -a flag. This can be be used to create indexes that do not need updating.
lrcli load [-d <db>] [-m <max>] [-a] <space> <json>
The index synonym list can be listed or updated from a file:
lrcli synonyms [-d <db>] [<json>]
Each synonym definition is a JSON array of the following format:
["description", ["synonym1", "synonym2", ...]]Example:
["CM", ["cm", "centimeter", "centi"]]
["DM", ["dm", "decimeter", "deci"]]The spell fix index is automatically updated during normal operation. To force an update, run lrcli spelling update <mincount>, where <mincount> is the minimum number of occurances of a word in the main index to be included in the spell fix index.
lrcli monitor starts a basic cluster monitor that prints cluster status messages from the different service instances.
The index database can be queried directly for debugging or development.
The database is a plain Sqlite3 database, but uses special extensions, which makes it hard to query using the regular sqlite3 tool.
Using lrcli sql, the current index database can be queried directly like this:
lrcli sql "select count(*) from docs"Since it might be hard to get the escaping of all quote characters right, the query can be loaded from a file:
lrcli sql @query.sqlThe database schema is version managed using migrations. If, during development of Letarette itself, the migration state gets out of sync, lrcli can be used to reset the current migration level:
lrcli resetmigration 4Note: this is only needed during development of Letarette when the service refuses to launch due to a previous unsuccessful migration.