Skip to content

Commit 22e82b7

Browse files
Improvements to APIView Search (Azure#3685)
1 parent 783e826 commit 22e82b7

File tree

2 files changed

+58
-11
lines changed

2 files changed

+58
-11
lines changed

src/dotnet/APIView/APIViewWeb/Client/src/reviews.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@
113113

114114
searchBox.on('input', _.debounce(function(e) {
115115
updateListedReviews();
116-
}, 300));
116+
}, 600));
117117

118118
searchButton.on('click', function() {
119119
updateListedReviews();

src/dotnet/APIView/APIViewWeb/Repositories/CosmosReviewRepository.cs

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -141,18 +141,65 @@ public async Task<IEnumerable<string>> GetReviewFirstLevelPropertiesAsync(string
141141
{
142142
var searchAsQueryStr = ArrayToQueryString<string>(search);
143143
var searchAsSingleString = '"' + String.Join(' ', search) + '"';
144-
queryStringBuilder.Append($" AND (r.Author IN {searchAsQueryStr}");
145-
queryStringBuilder.Append($" OR STRINGEQUALS(r.Revisions[0].Name, {searchAsSingleString}, true)");
146-
queryStringBuilder.Append($" OR CONTAINS(r.Name, {searchAsSingleString}, true)");
147-
queryStringBuilder.Append($" OR CONTAINS(r.ServiceName, {searchAsSingleString}, true)");
148-
queryStringBuilder.Append($" OR CONTAINS(r.PackageDisplayName, {searchAsSingleString}, true)");
149-
queryStringBuilder.Append($" OR (CONTAINS(r.Name, \"{search[0]}\", true)");
150-
151-
for (int i = 1; i < search.Count; i++)
144+
145+
var hasExactMatchQuery = search.Any(
146+
s => (
147+
s.StartsWith("package:") ||
148+
s.StartsWith("pr:") ||
149+
s.StartsWith("author:") ||
150+
s.StartsWith("service:") ||
151+
s.StartsWith("name:")
152+
));
153+
154+
if (hasExactMatchQuery)
155+
{
156+
foreach (var item in search)
157+
{
158+
if (item.StartsWith("package:"))
159+
{
160+
var query = '"' + $"{item.Replace("package:", "")}" + '"';
161+
queryStringBuilder.Append($" AND STRINGEQUALS(ARRAY_SLICE(r.Revisions, -1)[0].Files[0].PackageName, {query}, true)");
162+
}
163+
else if (item.StartsWith("author:"))
164+
{
165+
var query = '"' + $"{item.Replace("author:", "")}" + '"';
166+
queryStringBuilder.Append($" AND STRINGEQUALS(r.Author, {query}, true)");
167+
}
168+
else if (item.StartsWith("service:"))
169+
{
170+
var query = '"' + $"{item.Replace("service:", "")}" + '"';
171+
queryStringBuilder.Append($" AND STRINGEQUALS(r.ServiceName, {query}, true)");
172+
}
173+
else if (item.StartsWith("pr:"))
174+
{
175+
var query = '"' + $"{item.Replace("pr:", "")}" + '"';
176+
queryStringBuilder.Append($" AND ENDSWITH(ARRAY_SLICE(r.Revisions, -1)[0].Label, {query}, true)");
177+
}
178+
else if (item.StartsWith("name:"))
179+
{
180+
var query = '"' + $"{item.Replace("name:", "")}" + '"';
181+
queryStringBuilder.Append($" AND CONTAINS(ARRAY_SLICE(r.Revisions, -1)[0].Name, {query}, true)");
182+
}
183+
else
184+
{
185+
var query = '"' + $"{item}" + '"';
186+
queryStringBuilder.Append($" AND CONTAINS(ARRAY_SLICE(r.Revisions, -1)[0].Name, {query}, true)");
187+
}
188+
}
189+
}
190+
else
152191
{
153-
queryStringBuilder.Append($" AND CONTAINS(r.Revisions[0].Name, \"{search[i]}\", true)");
192+
queryStringBuilder.Append($" AND (r.Author IN {searchAsQueryStr}");
193+
foreach (var item in search)
194+
{
195+
var query = '"' + $"{item}" + '"';
196+
queryStringBuilder.Append($" OR CONTAINS(ARRAY_SLICE(r.Revisions, -1)[0].Name, {query}, true)");
197+
queryStringBuilder.Append($" OR CONTAINS(r.Name, {query}, true)");
198+
queryStringBuilder.Append($" OR CONTAINS(r.ServiceName, {query}, true)");
199+
queryStringBuilder.Append($" OR CONTAINS(r.PackageDisplayName, {query}, true)");
200+
}
201+
queryStringBuilder.Append($")");
154202
}
155-
queryStringBuilder.Append($"))");
156203
}
157204

158205
if (languages != null && languages.Count > 0)

0 commit comments

Comments
 (0)