56 lines
1.9 KiB
JavaScript
56 lines
1.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const default_1 = require("../dialect/default");
|
|
exports.default = {
|
|
NOT_KEYED_COMMAND: true,
|
|
IS_READ_ONLY: true,
|
|
/**
|
|
* Performs spelling correction on a search query.
|
|
* @param parser - The command parser
|
|
* @param index - Name of the index to use for spelling corrections
|
|
* @param query - The search query to check for spelling
|
|
* @param options - Optional parameters:
|
|
* - DISTANCE: Maximum Levenshtein distance for spelling suggestions
|
|
* - TERMS: Custom dictionary terms to include/exclude
|
|
* - DIALECT: Version of query dialect to use (defaults to 1)
|
|
*/
|
|
parseCommand(parser, index, query, options) {
|
|
parser.push('FT.SPELLCHECK', index, query);
|
|
if (options?.DISTANCE) {
|
|
parser.push('DISTANCE', options.DISTANCE.toString());
|
|
}
|
|
if (options?.TERMS) {
|
|
if (Array.isArray(options.TERMS)) {
|
|
for (const term of options.TERMS) {
|
|
parseTerms(parser, term);
|
|
}
|
|
}
|
|
else {
|
|
parseTerms(parser, options.TERMS);
|
|
}
|
|
}
|
|
if (options?.DIALECT) {
|
|
parser.push('DIALECT', options.DIALECT.toString());
|
|
}
|
|
else {
|
|
parser.push('DIALECT', default_1.DEFAULT_DIALECT);
|
|
}
|
|
},
|
|
transformReply: {
|
|
2: (rawReply) => {
|
|
return rawReply.map(([, term, suggestions]) => ({
|
|
term,
|
|
suggestions: suggestions.map(([score, suggestion]) => ({
|
|
score: Number(score),
|
|
suggestion
|
|
}))
|
|
}));
|
|
},
|
|
3: undefined,
|
|
},
|
|
unstableResp3: true
|
|
};
|
|
function parseTerms(parser, { mode, dictionary }) {
|
|
parser.push('TERMS', mode, dictionary);
|
|
}
|
|
//# sourceMappingURL=SPELLCHECK.js.map
|