Skip to content

Commit

Permalink
Move support for NOCONTENT search option from client.search to client…
Browse files Browse the repository at this point in the history
….searchNoContent
  • Loading branch information
brettburch committed Sep 14, 2023
1 parent e9ee84c commit 08cb648
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 12 deletions.
7 changes: 0 additions & 7 deletions packages/search/lib/commands/SEARCH.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,6 @@ describe('SEARCH', () => {
);
});

it('with NOCONTENT', () => {
assert.deepEqual(
transformArguments('index', 'query', { NOCONTENT: true }),
['FT.SEARCH', 'index', 'query', 'NOCONTENT']
);
});

it('with VERBATIM', () => {
assert.deepEqual(
transformArguments('index', 'query', { VERBATIM: true }),
Expand Down
1 change: 0 additions & 1 deletion packages/search/lib/commands/SEARCH.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ export const FIRST_KEY_INDEX = 1;
export const IS_READ_ONLY = true;

export interface SearchOptions {
NOCONTENT?: true;
VERBATIM?: true;
NOSTOPWORDS?: true;
// WITHSCORES?: true;
Expand Down
36 changes: 36 additions & 0 deletions packages/search/lib/commands/SEARCH_NOCONTENT.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { strict as assert } from 'assert';
import { SchemaFieldTypes } from '.';
import testUtils, { GLOBAL } from '../test-utils';
import { transformArguments } from './SEARCH_NOCONTENT';

describe('SEARCH_NOCONTENT', () => {
describe('transformArguments', () => {
it('without options', () => {
assert.deepEqual(
transformArguments('index', 'query'),
['FT.SEARCH', 'index', 'query', 'NOCONTENT']
);
});
});

describe('client.ft.searchNoContent', () => {
testUtils.testWithClient('returns total and keys', async client => {
await Promise.all([
client.ft.create('index', {
field: SchemaFieldTypes.NUMERIC
}),
client.hSet('1', 'field', 'field1'),
client.hSet('2', 'field', 'field2'),
client.hSet('3', 'field', 'field3')
]);

assert.deepEqual(
await client.ft.searchNoContent('index', '*'),
{
total: 3,
documents: ['1','2','3']
}
);
}, GLOBAL.SERVERS.OPEN);
});
});
30 changes: 30 additions & 0 deletions packages/search/lib/commands/SEARCH_NOCONTENT.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { RedisCommandArguments } from "@redis/client/dist/lib/commands";
import { pushSearchOptions } from ".";
import { SearchOptions, SearchRawReply } from "./SEARCH";

export const FIRST_KEY_INDEX = 1;

export const IS_READ_ONLY = true;

export function transformArguments(
index: string,
query: string,
options?: SearchOptions
): RedisCommandArguments {
return pushSearchOptions(
['FT.SEARCH', index, query, 'NOCONTENT'],
options
);
}

export interface SearchNonContentReply {
total: number;
documents: Array<string>;
};

export function transformReply(reply: SearchRawReply): SearchNonContentReply {
return {
total: reply[0],
documents: reply.slice(1)
};
}
7 changes: 3 additions & 4 deletions packages/search/lib/commands/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import * as INFO from './INFO';
import * as PROFILESEARCH from './PROFILE_SEARCH';
import * as PROFILEAGGREGATE from './PROFILE_AGGREGATE';
import * as SEARCH from './SEARCH';
import * as SEARCH_NOCONTENT from './SEARCH_NOCONTENT';
import * as SPELLCHECK from './SPELLCHECK';
import * as SUGADD from './SUGADD';
import * as SUGDEL from './SUGDEL';
Expand Down Expand Up @@ -80,6 +81,8 @@ export default {
profileAggregate: PROFILEAGGREGATE,
SEARCH,
search: SEARCH,
SEARCH_NOCONTENT,
searchNoContent: SEARCH_NOCONTENT,
SPELLCHECK,
spellCheck: SPELLCHECK,
SUGADD,
Expand Down Expand Up @@ -395,10 +398,6 @@ export function pushSearchOptions(
args: RedisCommandArguments,
options?: SearchOptions
): RedisCommandArguments {
if (options?.NOCONTENT) {
args.push('NOCONTENT');
}

if (options?.VERBATIM) {
args.push('VERBATIM');
}
Expand Down

0 comments on commit 08cb648

Please sign in to comment.