You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// Use query builder for more complex queries with relevance scoring
62
62
constqueryBuilder=this.userRepository
63
63
.createQueryBuilder("user")
64
64
.select([
65
65
"user.id",
66
66
"user.handle",
67
67
"user.name",
68
+
"user.ename",
68
69
"user.description",
69
70
"user.avatarUrl",
70
71
"user.isVerified"
71
72
])
73
+
.addSelect(`
74
+
CASE
75
+
WHEN user.ename ILIKE :exactQuery THEN 100
76
+
WHEN user.name ILIKE :exactQuery THEN 90
77
+
WHEN user.handle ILIKE :exactQuery THEN 80
78
+
WHEN user.ename ILIKE :query THEN 70
79
+
WHEN user.name ILIKE :query THEN 60
80
+
WHEN user.handle ILIKE :query THEN 50
81
+
WHEN user.description ILIKE :query THEN 30
82
+
WHEN user.ename ILIKE :fuzzyQuery THEN 40
83
+
WHEN user.name ILIKE :fuzzyQuery THEN 35
84
+
WHEN user.handle ILIKE :fuzzyQuery THEN 30
85
+
ELSE 0
86
+
END`,'relevance_score')
72
87
.where(
73
-
"user.name ILIKE :query OR user.ename ILIKE :query OR user.handle ILIKE :query OR user.description ILIKE :query OR user.name ILIKE :fuzzyQuery OR user.ename ILIKE :fuzzyQuery OR user.handle ILIKE :fuzzyQuery",
88
+
"user.name ILIKE :query OR user.ename ILIKE :query OR user.handle ILIKE :query OR user.description ILIKE :query OR user.ename ILIKE :fuzzyQuery OR user.name ILIKE :fuzzyQuery OR user.handle ILIKE :fuzzyQuery",
74
89
{
75
90
query: `%${searchQuery}%`,
91
+
exactQuery: searchQuery,// Exact match for highest priority
76
92
fuzzyQuery: `%${searchQuery.split('').join('%')}%`// Fuzzy search with wildcards between characters
77
93
}
78
94
);
@@ -98,8 +114,10 @@ export class UserService {
98
114
break;
99
115
case"relevance":
100
116
default:
101
-
// Default relevance sorting: verified first, then by name
// Default relevance sorting: relevance score first, then verified status, then by name
118
+
queryBuilder.orderBy("relevance_score","DESC")
119
+
.addOrderBy("user.isVerified","DESC")
120
+
.addOrderBy("user.name","ASC");
103
121
break;
104
122
}
105
123
@@ -121,13 +139,14 @@ export class UserService {
121
139
return0;
122
140
}
123
141
124
-
// Use query builder for count
142
+
// Use query builder for count with same search logic
125
143
constqueryBuilder=this.userRepository
126
144
.createQueryBuilder("user")
127
145
.where(
128
-
"user.name ILIKE :query OR user.ename ILIKE :query OR user.handle ILIKE :query OR user.description ILIKE :query OR user.name ILIKE :fuzzyQuery OR user.ename ILIKE :fuzzyQuery OR user.handle ILIKE :fuzzyQuery",
146
+
"user.name ILIKE :query OR user.ename ILIKE :query OR user.handle ILIKE :query OR user.description ILIKE :query OR user.ename ILIKE :fuzzyQuery OR user.name ILIKE :fuzzyQuery OR user.handle ILIKE :fuzzyQuery",
129
147
{
130
148
query: `%${searchQuery}%`,
149
+
exactQuery: searchQuery,// Exact match for highest priority
131
150
fuzzyQuery: `%${searchQuery.split('').join('%')}%`// Fuzzy search with wildcards between characters
132
151
}
133
152
);
@@ -152,7 +171,7 @@ export class UserService {
152
171
return[];
153
172
}
154
173
155
-
// Use query builder for suggestions
174
+
// Use query builder for suggestions with relevance scoring
156
175
constqueryBuilder=this.userRepository
157
176
.createQueryBuilder("user")
158
177
.select([
@@ -161,18 +180,138 @@ export class UserService {
161
180
"user.name",
162
181
"user.ename"
163
182
])
183
+
.addSelect(`
184
+
CASE
185
+
WHEN user.ename ILIKE :exactQuery THEN 100
186
+
WHEN user.name ILIKE :exactQuery THEN 90
187
+
WHEN user.ename ILIKE :query THEN 70
188
+
WHEN user.name ILIKE :query THEN 60
189
+
WHEN user.handle ILIKE :query THEN 50
190
+
WHEN user.ename ILIKE :fuzzyQuery THEN 40
191
+
WHEN user.name ILIKE :fuzzyQuery THEN 35
192
+
WHEN user.handle ILIKE :fuzzyQuery THEN 30
193
+
ELSE 0
194
+
END`,'relevance_score')
164
195
.where(
165
-
"user.name ILIKE :query OR user.ename ILIKE :query OR user.handle ILIKE :query",
166
-
{query: `%${searchQuery}%`}
196
+
"user.name ILIKE :query OR user.ename ILIKE :query OR user.handle ILIKE :query OR user.ename ILIKE :fuzzyQuery OR user.name ILIKE :fuzzyQuery OR user.handle ILIKE :fuzzyQuery",
197
+
{
198
+
query: `%${searchQuery}%`,
199
+
exactQuery: searchQuery,// Exact match for highest priority
200
+
fuzzyQuery: `%${searchQuery.split('').join('%')}%`// Fuzzy search with wildcards between characters
0 commit comments