@@ -17,7 +17,7 @@ import {
17
17
Session ,
18
18
UnsecuredDto ,
19
19
} from '~/common' ;
20
- import { DtoRepository , UniquenessError } from '~/core/database' ;
20
+ import { DtoRepository , OnIndex , UniquenessError } from '~/core/database' ;
21
21
import {
22
22
ACTIVE ,
23
23
any ,
@@ -27,6 +27,7 @@ import {
27
27
defineSorters ,
28
28
exp ,
29
29
filter ,
30
+ FullTextIndex ,
30
31
matchChangesetAndChangedProps ,
31
32
matchProjectScopedRoles ,
32
33
matchProjectSens ,
@@ -268,9 +269,23 @@ export class LanguageRepository extends DtoRepository<
268
269
. first ( ) ;
269
270
return ! ! res ;
270
271
}
272
+
273
+ @OnIndex ( 'schema' )
274
+ private async createSchemaIndexes ( ) {
275
+ await this . db . query ( ) . apply ( NameIndex . create ( ) ) . run ( ) ;
276
+ }
271
277
}
272
278
273
279
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
+ } ) ,
274
289
sensitivity : filter . stringListProp ( ) ,
275
290
leastOfThese : filter . propVal ( ) ,
276
291
isSignLanguage : filter . propVal ( ) ,
@@ -355,3 +370,10 @@ export const languageSorters = defineSorters(Language, {
355
370
} ) ;
356
371
357
372
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