@@ -597,11 +597,14 @@ function setUserAttributesFiltersToEsQuery (filterClause, attributes) {
597597 }
598598 }
599599 ] ,
600- should : attribute . value . map ( val => ( {
601- term : {
602- [ USER_ATTRIBUTE . esDocumentValueQuery ] : val
600+ should : attribute . value . map ( val => {
601+ return {
602+ query_string : {
603+ default_field : `${ [ USER_ATTRIBUTE . esDocumentValueStringQuery ] } ` ,
604+ query : `*${ val . replace ( / + / g, ' ' ) . split ( ' ' ) . join ( '* AND *' ) } *`
605+ }
603606 }
604- } ) ) ,
607+ } ) ,
605608 minimum_should_match : 1
606609 }
607610 }
@@ -640,6 +643,13 @@ async function searchSkills (keyword) {
640643async function setUserSearchClausesToEsQuery ( boolClause , keyword ) {
641644 const skillIds = await searchSkills ( keyword )
642645
646+ boolClause . should . push ( {
647+ query_string : {
648+ fields : [ 'firstName' , 'lastName' , 'handle' ] ,
649+ query : `*${ keyword . replace ( / + / g, ' ' ) . split ( ' ' ) . join ( '* AND *' ) } *`
650+ }
651+ } )
652+
643653 boolClause . should . push ( {
644654 nested : {
645655 path : USER_ATTRIBUTE . esDocumentPath ,
@@ -783,21 +793,27 @@ async function resolveUserFilterFromDb (filter, { handle }, organizationId) {
783793 }
784794 } )
785795
786- if ( typeof filter . values === 'object' ) {
787- for ( const value of filter . values ) {
796+ if ( typeof filter . values !== 'object' ) {
797+ filter . values = [ filter . values ]
798+ }
799+
800+ for ( const value of filter . values ) {
801+ if ( value === 'true' || value === 'false' ) {
788802 esQueryClause . bool . should . push ( {
789803 term : {
790804 [ filter . esDocumentValueQuery ] : value
791805 }
792806 } )
807+ } else {
808+ esQueryClause . bool . should . push ( {
809+ query_string : {
810+ default_field : `${ filter . esDocumentValueQuery } ` ,
811+ query : `*${ value . replace ( / + / g, ' ' ) . split ( ' ' ) . join ( '* AND *' ) } *`
812+ }
813+ } )
793814 }
794- } else {
795- esQueryClause . bool . should . push ( {
796- term : {
797- [ filter . esDocumentValueQuery ] : filter . values
798- }
799- } )
800815 }
816+
801817 esQueryClause . bool . minimum_should_match = 1
802818
803819 return {
@@ -815,10 +831,18 @@ async function resolveUserFilterFromDb (filter, { handle }, organizationId) {
815831 }
816832
817833 const model = filter . model
834+
835+ let filterValuesQuery = `${ filter . queryField } like '%${ filter . values [ 0 ] } %'`
836+ const nFilterValues = filter . values . length
837+ for ( let i = 1 ; i < nFilterValues ; i ++ ) {
838+ filterValuesQuery = `${ filterValuesQuery } OR ${ filter . queryField } like '%${ filter . values [ i ] } %'`
839+ }
840+
818841 // TODO Use the service method instead of raw query
819842 const dbQueries = [
820- ` ${ filter . queryField } in ( ${ filter . values . map ( f => `' ${ f } '` ) . join ( ',' ) } )`
843+ filterValuesQuery
821844 ]
845+
822846 const results = await DBHelper . find ( model , dbQueries )
823847 if ( results . length > 0 ) {
824848 for ( const { id } of results ) {
0 commit comments