Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Commit c6b8f06

Browse files
Update keyword search to be a substring search instead of exact match. Also search on first name, last name and handle
1 parent d4340f1 commit c6b8f06

File tree

1 file changed

+37
-13
lines changed

1 file changed

+37
-13
lines changed

src/common/es-helper.js

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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) {
640643
async 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

Comments
 (0)