Search

Adds search facilities to the top-level navigation bar

Technology

The search module provides comprehensive search functionality for Project Forge applications. It adds a powerful, extensible search system with a clean UI integrated into the application navigation.

Overview

This module provides:

Key Features

Search Architecture

User Experience

Query Support

Usage

Basic Implementation

  1. Enable the module in your Project Forge configuration

  2. Implement search providers by modifying ./app/lib/search/search.go:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func Search(ctx context.Context, params *Params, ps *cutil.PageState, logger util.Logger) *Results {
ret := NewResults(params)

// Add your search providers
if params.Q != "" {
// Search users
if userResults := searchUsers(ctx, params.Q); len(userResults) > 0 {
ret.Results = append(ret.Results, userResults...)
}

// Search content
if contentResults := searchContent(ctx, params.Q); len(contentResults) > 0 {
ret.Results = append(ret.Results, contentResults...)
}
}

return ret
}
  1. Create search providers for your data sources:
1
2
3
4
func searchUsers(ctx context.Context, query string) result.Results {
// Implement user search logic
// Return result.Result instances with proper highlighting
}

Advanced Features

Create typed results for better UX:

1
2
3
4
5
6
7
8
9
func NewUserResult(user *User, query string) *result.Result {
return &result.Result{
Type: "user",
Title: user.Name,
Summary: user.Email,
URL: fmt.Sprintf("/users/%d", user.ID),
Matches: result.HighlightMatches(user.Name, query),
}
}

Source Code

See Also