package Ġcom . open l attice . linking . clustering Ċ Ċ import Ġcom . open l attice . data . Entity Data Key Ċ import Ġcom . open l attice . linking . Background Link ing Service Ċ import Ġcom . open l attice . linking . DataLoader Ċ import Ġcom . open l attice . linking . Block Ċ import Ġcom . open l attice . linking . matching . Matcher Ċ Ċ /** Ċ Ġ* Ġ@ author ĠD rew ĠBa iley Ġ( d rew @ open l attice . com ) Ċ Ġ*/ Ċ class ĠPostgres Cluster er ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġloader : ĠDataLoader , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmatcher : ĠMatcher Ċ ): ĠCluster er Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġscore Cluster ( Ġmatched Cluster : ĠCluster Ġ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmatched Cluster . values . flatMap Ġ{ Ġit . values Ġ}. min OrNull () Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcluster ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock Key : ĠEntity Data Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentified Cluster : ĠKey ed Cluster ĊĠĠĠ Ġ): ĠS cored Cluster Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblock Ġ= ĠBlock ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloader . get Link ing Entities ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBackground Link ing Service . collect Keys ( ident ified Cluster . cluster ) Ġ+ Ġblock Key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// At Ġsome Ġpoint , Ġwe Ġmay Ġwant Ġto Ġskip Ġre computing Ġmatches Ġfor Ġexisting Ġcluster Ġelements Ġas Ġan Ġoptimization . ĊĠĠĠĠĠĠĠ Ġ// Since Ġwe 're Ġfresh ly Ġloading Ġentities Ġit 's Ġnot Ġtoo Ġbad Ġto Ġre compute Ġeverything . ĊĊĠĠĠĠĠĠĠ Ġval Ġmatched Block Ġ= Ġmatcher . match ( block ) ĊĠĠĠĠĠĠĠ Ġval Ġmatched Cluster Ġ= ĠCluster ( matched Block . matches ) ĊĠĠĠĠĠĠĠ Ġval Ġscore Ġ= Ġscore Cluster ( matched Cluster ) ĊĠĠĠĠĠĠĠ Ġreturn ĠS cored Cluster ( ident ified Cluster . id , Ġmatched Cluster , Ġscore ) ĊĠĠĠ Ġ} Ċ } Ċ