Skip to content

Commit 92ab813

Browse files
committed
Highlight directly using meilisearch
1 parent 2d8d8e8 commit 92ab813

File tree

4 files changed

+22
-9
lines changed

4 files changed

+22
-9
lines changed

Components/Pages/Home.razor

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,11 @@ else
291291
return;
292292
}
293293

294-
var results = await SearchService.SearchRepositories(GithubUsername, searchQuery);
294+
var results = await SearchService.SearchRepositories(GithubUsername, searchQuery, new SearchOptions
295+
{
296+
HighlightPreTag = """<b class="pa-1 mud-elevation-2 mud-theme-primary">""",
297+
HighlightPostTag = "</b>",
298+
});
295299
_searchResults.AddRange(results);
296300

297301
if (_searchResults.Count == 0)

Searching/DependencyInjectionExtensions.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@ public static class DependencyInjectionExtensions
88
public static WebApplicationBuilder AddMeilisearch(this WebApplicationBuilder builder)
99
{
1010
builder.Services
11-
.AddOptions<SearchOptions>()
11+
.AddOptions<MeilisearchOptions>()
1212
.Bind(builder.Configuration.GetSection("Meilisearch"));
13-
13+
1414
builder.Services.AddScoped<SearchService>();
1515
builder.Services.AddScoped<MeilisearchMessageHandler>();
1616
builder.Services.AddHttpClient(nameof(MeilisearchClient), (serviceProvider, client) =>
1717
{
18-
var url = serviceProvider.GetRequiredService<IOptions<SearchOptions>>().Value.MeilisearchUrl;
18+
var url = serviceProvider.GetRequiredService<IOptions<MeilisearchOptions>>().Value.MeilisearchUrl;
1919
client.BaseAddress = new Uri(url);
2020
}).AddTypedClient<MeilisearchClient>(
2121
(client, serviceProvider) =>
2222
{
23-
var apiKey = serviceProvider.GetRequiredService<IOptions<SearchOptions>>().Value.ApiKey;
23+
var apiKey = serviceProvider.GetRequiredService<IOptions<MeilisearchOptions>>().Value.ApiKey;
2424
return new MeilisearchClient(client, apiKey);
2525
});
2626
return builder;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace GithubStarSearch.Searching;
22

3-
public class SearchOptions
3+
public class MeilisearchOptions
44
{
55
public required string MeilisearchUrl { get; set; }
66
public required string ApiKey { get; set; }

Searching/SearchService.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,14 @@ namespace GithubStarSearch.Searching;
88
// We need to get _formated part of the response, but the dotnet SDK does not implement it.
99
// https://github.com/meilisearch/meilisearch-dotnet/issues/315
1010

11+
public record SearchOptions
12+
{
13+
public string HighlightPreTag { get; init; } = "<em>";
14+
public string HighlightPostTag { get; init; } = "</em>";
15+
}
16+
1117
public class SearchService(
12-
IOptions<SearchOptions> searchOptions,
18+
IOptions<MeilisearchOptions> searchOptions,
1319
MeilisearchClient client,
1420
ILogger<SearchService> logger)
1521
{
@@ -37,7 +43,8 @@ public async Task IndexRepositories(IEnumerable<Repository> repositories)
3743
}
3844

3945
public async Task<IReadOnlyCollection<Repository>> SearchRepositories(string starredBy,
40-
string term)
46+
string term,
47+
SearchOptions options)
4148
{
4249
await MakeSureIndexExists();
4350
await SetupIndex();
@@ -62,7 +69,9 @@ public async Task<IReadOnlyCollection<Repository>> SearchRepositories(string sta
6269
nameof(Repository.Readme).ToCamelCase()
6370
],
6471
AttributesToCrop = [nameof(Repository.Description).ToCamelCase(), nameof(Repository.Readme).ToCamelCase()],
65-
CropLength = searchOptions.Value.CropLength
72+
CropLength = searchOptions.Value.CropLength,
73+
HighlightPreTag = options.HighlightPreTag,
74+
HighlightPostTag = options.HighlightPostTag
6675
};
6776

6877
var results = await index.SearchAsync<FormattedSearchableRepository>(term, searchQuery);

0 commit comments

Comments
 (0)