@@ -32,6 +32,7 @@ import {
32
32
createRelationships ,
33
33
defineSorters ,
34
34
filter ,
35
+ FullTextIndex ,
35
36
INACTIVE ,
36
37
matchChangesetAndChangedProps ,
37
38
matchProjectSens ,
@@ -514,6 +515,12 @@ export class EngagementRepository extends CommonRepository {
514
515
private createIndexes ( ) {
515
516
return this . getConstraintsFor ( IEngagement ) ;
516
517
}
518
+ @OnIndex ( 'schema' )
519
+ private async createSchemaIndexes ( ) {
520
+ await this . db . query ( ) . apply ( NameIndex . create ( ) ) . run ( ) ;
521
+ await this . db . query ( ) . apply ( LanguageNameIndex . create ( ) ) . run ( ) ;
522
+ await this . db . query ( ) . apply ( InternshipNameIndex . create ( ) ) . run ( ) ;
523
+ }
517
524
}
518
525
519
526
export const engagementFilters = filter . define ( ( ) => EngagementFilters , {
@@ -526,6 +533,17 @@ export const engagementFilters = filter.define(() => EngagementFilters, {
526
533
) ,
527
534
} ) ,
528
535
status : filter . stringListProp ( ) ,
536
+ name : filter . fullText ( {
537
+ index : ( ) => NameIndex ,
538
+ matchToNode : ( q ) =>
539
+ q . match ( [
540
+ node ( 'node' , 'Engagement' ) ,
541
+ relation ( 'either' , '' , undefined , ACTIVE ) ,
542
+ node ( '' , 'BaseNode' ) ,
543
+ relation ( 'out' , '' , undefined , ACTIVE ) ,
544
+ node ( 'match' ) ,
545
+ ] ) ,
546
+ } ) ,
529
547
projectId : filter . pathExists ( ( id ) => [
530
548
node ( 'node' ) ,
531
549
relation ( 'in' , '' , 'engagement' ) ,
@@ -658,3 +676,22 @@ const multiPropsAsSortString = (props: string[]) =>
658
676
' + ' ,
659
677
props . map ( ( prop ) => `coalesce(${ prop } .value, "")` ) ,
660
678
) + ' as sortValue' ;
679
+
680
+ const NameIndex = FullTextIndex ( {
681
+ indexName : 'EngagementName' ,
682
+ labels : [ 'ProjectName' , 'LanguageName' , 'LanguageDisplayName' , 'UserName' ] ,
683
+ properties : 'value' ,
684
+ analyzer : 'standard-folding' ,
685
+ } ) ;
686
+ const LanguageNameIndex = FullTextIndex ( {
687
+ indexName : 'LanguageEngagementName' ,
688
+ labels : [ 'ProjectName' , 'LanguageName' , 'LanguageDisplayName' ] ,
689
+ properties : 'value' ,
690
+ analyzer : 'standard-folding' ,
691
+ } ) ;
692
+ const InternshipNameIndex = FullTextIndex ( {
693
+ indexName : 'InternshipEngagementName' ,
694
+ labels : [ 'ProjectName' , 'UserName' ] ,
695
+ properties : 'value' ,
696
+ analyzer : 'standard-folding' ,
697
+ } ) ;
0 commit comments