Skip to content

Commit 1c9bb87

Browse files
committed
Add fulltext index & filter for language name
1 parent 79ab857 commit 1c9bb87

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

src/components/language/dto/list-language.dto.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ export abstract class EthnologueLanguageFilters {
3030

3131
@InputType()
3232
export abstract class LanguageFilters {
33+
@Field({
34+
nullable: true,
35+
})
36+
readonly name?: string;
37+
3338
@Field(() => [Sensitivity], {
3439
description: 'Only languages with these sensitivities',
3540
nullable: true,

src/components/language/language.repository.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
Session,
1818
UnsecuredDto,
1919
} from '~/common';
20-
import { DtoRepository, UniquenessError } from '~/core/database';
20+
import { DtoRepository, OnIndex, UniquenessError } from '~/core/database';
2121
import {
2222
ACTIVE,
2323
any,
@@ -27,6 +27,7 @@ import {
2727
defineSorters,
2828
exp,
2929
filter,
30+
FullTextIndex,
3031
matchChangesetAndChangedProps,
3132
matchProjectScopedRoles,
3233
matchProjectSens,
@@ -268,9 +269,23 @@ export class LanguageRepository extends DtoRepository<
268269
.first();
269270
return !!res;
270271
}
272+
273+
@OnIndex('schema')
274+
private async createSchemaIndexes() {
275+
await this.db.query().apply(NameIndex.create()).run();
276+
}
271277
}
272278

273279
export const languageFilters = filter.define(() => LanguageFilters, {
280+
name: filter.fullText({
281+
index: () => NameIndex,
282+
matchToNode: (q) =>
283+
q.match([
284+
node('node', 'Language'),
285+
relation('out', '', undefined, ACTIVE),
286+
node('match'),
287+
]),
288+
}),
274289
sensitivity: filter.stringListProp(),
275290
leastOfThese: filter.propVal(),
276291
isSignLanguage: filter.propVal(),
@@ -355,3 +370,10 @@ export const languageSorters = defineSorters(Language, {
355370
});
356371

357372
const ethnologueSorters = defineSorters(EthnologueLanguage, {});
373+
374+
const NameIndex = FullTextIndex({
375+
indexName: 'LanguageName',
376+
labels: ['LanguageName', 'LanguageDisplayName'],
377+
properties: 'value',
378+
analyzer: 'standard-folding',
379+
});

0 commit comments

Comments
 (0)