// This example demonstrates how to use RediSearch to index and query data // stored in Redis hashes. import { createClient, SCHEMA_FIELD_TYPE } from 'redis'; const client = createClient(); await client.connect(); // Create an index... try { // Documentation: https://redis.io/commands/ft.create/ await client.ft.create('idx:animals', { name: { type: SCHEMA_FIELD_TYPE.TEXT, SORTABLE: true }, species: SCHEMA_FIELD_TYPE.TAG, age: SCHEMA_FIELD_TYPE.NUMERIC }, { ON: 'HASH', PREFIX: 'noderedis:animals' }); } catch (e) { if (e.message === 'Index already exists') { console.log('Index exists already, skipped creation.'); } else { // Something went wrong, perhaps RediSearch isn't installed... console.error(e); process.exit(1); } } // Add some sample data... // https://redis.io/commands/hset/ await Promise.all([ client.hSet('noderedis:animals:1', {name: 'Fluffy', species: 'cat', age: 3}), client.hSet('noderedis:animals:2', {name: 'Ginger', species: 'cat', age: 4}), client.hSet('noderedis:animals:3', {name: 'Rover', species: 'dog', age: 9}), client.hSet('noderedis:animals:4', {name: 'Fido', species: 'dog', age: 7}) ]); // Perform a search query, find all the dogs... sort by age, descending. // Documentation: https://redis.io/commands/ft.search/ // Query syntax: https://redis.io/docs/stack/search/reference/query_syntax/ const results = await client.ft.search( 'idx:animals', '@species:{dog}', { SORTBY: { BY: 'age', DIRECTION: 'DESC' // or 'ASC (default if DIRECTION is not present) } } ); // results: // { // total: 2, // documents: [ // { // id: 'noderedis:animals:3', // value: { // name: 'Rover', // species: 'dog', // age: '9' // } // }, // { // id: 'noderedis:animals:4', // value: { // name: 'Fido', // species: 'dog', // age: '7' // } // } // ] // } console.log(`Results found: ${results.total}.`); for (const doc of results.documents) { // noderedis:animals:3: Rover, 9 years old. // noderedis:animals:4: Fido, 7 years old. console.log(`${doc.id}: ${doc.value.name}, ${doc.value.age} years old.`); } client.destroy();