@@ -52,6 +52,7 @@ const USER_FILTER_TO_MODEL = {
5252 queryField : 'name' ,
5353 esDocumentValueQuery : 'achievements.name' ,
5454 esDocumentQuery : 'achievements.id.keyword' ,
55+ esDocumentId : 'achievements.id' ,
5556 values : [ ]
5657 } ,
5758 get achievements ( ) { return this . achievement } ,
@@ -791,6 +792,13 @@ function buildEsQueryToGetAchievements (organizationId, keyword, size) {
791792 field : `${ USER_FILTER_TO_MODEL . achievement . esDocumentValueQuery } .keyword` ,
792793 include : `.*${ keyword . replace ( / [ ^ a - z A - Z ] / g, c => `[${ ! isRegexReserved ( c ) ? c : '\\' + c } ]` ) . replace ( / [ A - Z a - z ] / g, c => `[${ c . toLowerCase ( ) } ${ c . toUpperCase ( ) } ]` ) } .*` ,
793794 size : size || 1000
795+ } ,
796+ aggs : {
797+ ids : {
798+ top_hits : {
799+ _source : [ USER_FILTER_TO_MODEL . achievement . esDocumentId , USER_FILTER_TO_MODEL . achievement . esDocumentValueQuery ]
800+ }
801+ }
794802 }
795803 }
796804 }
@@ -1418,7 +1426,21 @@ async function searchAchievementValues ({ organizationId, keyword }) {
14181426
14191427 const esResult = await esClient . search ( esQuery )
14201428 logger . debug ( `ES response ${ JSON . stringify ( esResult , null , 2 ) } ` )
1421- const result = esResult . aggregations . achievements . buckets . map ( a => ( { name : a . key } ) )
1429+ const result = esResult . aggregations . achievements . buckets . map ( a => {
1430+ let achievementName = a . key
1431+ let achievementId = null
1432+
1433+ for ( let achievement of a . ids . hits . hits [ 0 ] . _source . achievements ) {
1434+ if ( achievement . name == achievementName ) {
1435+ achievementId = achievement . id
1436+ break ;
1437+ }
1438+ }
1439+ return {
1440+ id : achievementId ,
1441+ name : achievementName
1442+ } ;
1443+ } )
14221444
14231445 return {
14241446 result
0 commit comments