package Ġedu . w gu . os mt . collection Ċ Ċ import Ġedu . w gu . os mt . Pagination Defaults Ċ import Ġedu . w gu . os mt . api . model . Api Search Ċ import Ġedu . w gu . os mt . db . Publish Status Ċ import Ġedu . w gu . os mt . elasticsearch . Find s All By Publish Status Ċ import Ġedu . w gu . os mt . rich skill . Rich Skill Doc Ċ import Ġedu . w gu . os mt . rich skill . Rich Skill Es Repo Ċ import Ġorg . apache . lucene . search . join . Score Mode Ċ import Ġorg . elasticsearch . index . query .* Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . context . annotation . Configuration Ċ import Ġorg . springframework . data . domain . Page Ċ import Ġorg . springframework . data . domain . Page Request Ċ import Ġorg . springframework . data . domain . Page able Ċ import Ġorg . springframework . data . domain . Sort Ċ import Ġorg . springframework . data . elasticsearch . core . Elasticsearch Rest Template Ċ import Ġorg . springframework . data . elasticsearch . core . Search Hits Ċ import Ġorg . springframework . data . elasticsearch . core . query . Native Search QueryBuilder Ċ import Ġorg . springframework . data . elasticsearch . repository . Elasticsearch Repository Ċ import Ġorg . springframework . data . elasticsearch . repository . config . Enable Elasticsearch Repositories ĊĊ Ċ interface ĠCustom Collection Queries Ġ: ĠFinds All By Publish Status < Collection Doc > Ġ{ ĊĠĠĠ Ġval Ġrich Skill Es Repo : ĠRich Skill Es Repo ĊĊĠĠĠ Ġfun Ġcollection Properties Multi Match ( query : ĠString ): ĠAbstract QueryBuilder < *> ĊĠĠĠ Ġfun Ġby Api Search ( ĊĠĠĠĠĠĠĠ Ġapi Search : ĠApi Search , ĊĠĠĠĠĠĠĠ Ġpublish Status : ĠSet < Publish Status > Ġ= ĠPublish Status . publish Status Set , ĊĠĠĠĠĠĠĠ Ġpage able : ĠPage able Ġ= ĠPage Request . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPagination Defaults . size , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSort . by (" name . keyword "). desc ending () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ): ĠSearch Hits < Collection Doc > Ċ } Ċ Ċ class ĠCustom Collection Queries Impl Ġ@ Autowired Ġconstructor ( ĊĠĠĠ Ġoverride Ġval Ġelastic Search Template : ĠElasticsearch Rest Template , ĊĠĠĠ Ġoverride Ġval Ġrich Skill Es Repo : ĠRich Skill Es Repo Ċ ) Ġ: ĊĠĠĠ ĠCustom Collection Queries Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġjava Class Ġ= ĠCollection Doc :: class . java ĊĊĠĠĠ Ġoverride Ġfun Ġcollection Properties Multi Match ( query : ĠString ): ĠAbstract QueryBuilder < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Complex Ġ= Ġquery . contains ("\" ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcomplex Fields Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Collection Doc :: name . name }. raw ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Collection Doc :: name . name } ._ 2 gram ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Collection Doc :: name . name } ._ 3 gram ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCollection Doc :: author . name ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCollection Doc :: name . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Collection Doc :: name . name } ._ 2 gram ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Collection Doc :: name . name } ._ 3 gram ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCollection Doc :: author . name ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Complex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builders . simple QueryString Query ( query ). fields ( complex Fields . map Ġ{ Ġit Ġto Ġ 1 . 0 f Ġ}. toMap ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. default Operator ( Operator . AND ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builders . multi Match Query ( query , Ġ* fields ). type ( Multi Match QueryBuilder . Type . BOOL _ PREFIX ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġby Api Search ( ĊĠĠĠĠĠĠĠ Ġapi Search : ĠApi Search , ĊĠĠĠĠĠĠĠ Ġpublish Status : ĠSet < Publish Status >, ĊĠĠĠĠĠĠĠ Ġpage able : ĠPage able ĊĠĠĠ Ġ): ĠSearch Hits < Collection Doc > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn sq : ĠNative Search QueryBuilder Ġ= ĠNative Search QueryBuilder (). with Page able ( Page able . un page d ()) ĊĠĠĠĠĠĠĠ Ġval Ġb q Ġ= ĠQuery Builders . bool Query () ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠBool QueryBuilder (). must ( Query Builders . terms Query ( Rich Skill Doc :: publish Status . name , Ġpublish Status )) ĊĠĠĠĠĠĠĠ Ġn sq . with Filter ( filter ) ĊĠĠĠĠĠĠĠ Ġn sq . with Query ( bq ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġcollection Multi Property Results : ĠList < String > Ġ= ĠlistOf () ĊĊĠĠĠĠĠĠĠ Ġ// Ġtreat Ġthe Ġpresence Ġof Ġquery Ġproperty Ġto Ġmean Ġmulti Ġfield Ġsearch Ġwith Ġthat Ġterm ĊĠĠĠĠĠĠĠ Ġif Ġ(! api Search . query . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSearch Ġagainst Ġrich Ġskill Ġproperties ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb q . should ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBool QueryBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. must ( rich Skill Es Repo . rich Skill Properties Multi Match ( api Search . query )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. must ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builders . nested Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRich Skill Doc :: collections . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builders . match All Query (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScore Mode . Avg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). inner Hit ( Inner Hit Builder ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb q . should ( rich Skill Es Repo . occup ation Queries ( api Search . query )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsearch Ġon Ġcollection Ġspecific Ġproperties ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollection Multi Property Results Ġ= Ġelastic Search Template . search ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNative Search QueryBuilder (). with Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollection Properties Multi Match ( api Search . query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). with Page able ( Page able . un page d ()). with Filter ( filter ). build (), ĠCollection Doc :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). search Hits . map Ġ{ Ġit . content . uuid Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( api Search . advanced Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrich Skill Es Repo . generate Bool Queries From Api Search ( bq , Ġapi Search . advanced ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! api Search . advanced . collection Name . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Search . advanced . collection Name . contains ("\ "" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollection Multi Property Results Ġ= Ġelastic Search Template . search ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNative Search QueryBuilder (). with Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builders . simple QueryString Query ( api Search . advanced . collection Name ). field ("${ Collection Doc :: name . name }. raw "). default Operator ( Operator . AND ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). with Page able ( Page able . un page d ()). with Filter ( filter ). build (), ĠCollection Doc :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). search Hits . map Ġ{ Ġit . content . uuid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollection Multi Property Results Ġ= Ġelastic Search Template . search ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNative Search QueryBuilder (). with Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builders . match Phrase Prefix Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollection Doc :: name . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Search . advanced . collection Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). with Page able ( Page able . un page d ()). with Filter ( filter ). build (), ĠCollection Doc :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). search Hits . map Ġ{ Ġit . content . uuid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb q . must ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builders . nested Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRich Skill Doc :: collections . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builders . match All Query (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScore Mode . Avg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). inner Hit ( Inner Hit Builder ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// Ġquery Ġnor Ġadvanced Ġsearch Ġwas Ġprovided , Ġreturn Ġall Ġcollections ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb q . must ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builders . nested Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRich Skill Doc :: collections . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builders . match All Query (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScore Mode . Avg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). inner Hit ( Inner Hit Builder ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġelastic Search Template . search ( ns q . build (), ĠRich Skill Doc :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinner Hit Collection Uuid s Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults . search Hits . map NotNull Ġ{ Ġit . get Inner Hits (" collections ") ?. search Hits ?. map NotNull Ġ{ Ġit . content Ġas ĠCollection Doc Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatten (). map Ġ{ Ġit . uuid Ġ}. distinct () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġelastic Search Template . search ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNative Search QueryBuilder (). with Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builders . terms Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"_ id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( inner Hit Collection Uuid s Ġ+ Ġcollection Multi Property Results ). distinct () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). with Filter ( filter ). with Page able ( page able ). build (), ĠCollection Doc :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Configuration Ċ @ Enable Elasticsearch Repositories (" edu . w gu . os mt . collection ") Ċ class ĠCollection Es Repo Config Ċ Ċ interface ĠCollection Es Repo Ġ: ĠElasticsearch Repository < Collection Doc , ĠInt >, ĠCustom Collection Queries Ġ{ ĊĠĠĠ Ġfun ĠfindBy Uuid ( uuid : ĠString , Ġpage able : ĠPage able ): ĠPage < Collection Doc > ĊĊĠĠĠ Ġfun ĠfindAll By Uuid In ( ĊĠĠĠĠĠĠĠ Ġuuid s : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġpage able : ĠPage able ĊĠĠĠ Ġ): ĠPage < Collection Doc > ĊĊĠĠĠ Ġfun Ġfind ByName ( q : ĠString , Ġpage able : ĠPage able Ġ= ĠPage Request . of ( 0 , ĠPagination Defaults . size )): ĠPage < Collection Doc > Ċ } Ċ