jaedb / search
SilverStripe search engine
Installs: 2 141
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 6
Type:silverstripe-vendormodule
pkg:composer/jaedb/search
Requires
This package is not auto-updated.
Last update: 2025-10-26 11:23:39 UTC
README
The built-in SilverStripe search form is a very simple search engine. This plugin takes SQL-based searching to the next level, without requiring the implementation of a full-blown search engine like Solr or Elastic Search. It is designed to bring data-oriented filters on top of the simple text search functionality.
Requirements
- SilverStripe 4
Usage
- Create a
SearchPageinstance (typically at the root of your website). This page only is used to display results, so please refrain from creating multiple instances. - Configure your website's
_config/config.ymlto define search parameters. - Run
dev/buildto instansiate your new configuration
Configuration
types: associative list of types to searchLabel: front-end field labelTable: the object's primary table (note_Livesuffix for versioned objects)ClassName: full ClassNameClassNameShort: namespaced ClassNameFilters: a list of filters to apply pre-search (maps toDataList->Filter(key => value))Columns: columns to search for query string matches (formatTable.Column)
filters: associative list of filter optionsStructure: defines the filter's relational structure (must be one ofdb,has_oneorhas_many)Label: front-end field labelTable: relational subject's tableColumn: column to filter onOperator: SQL filter operator (ie>,=)JoinTables: associative list of relationship mappings (use thekeyfrom thetypesarray)Table: relational join tableColumn: column to join by
sorts: associative list of sort optionsLabel: front-end field labelSort: SQL sort string
Example configuration
---
Name: search
Before:
- '#site'
---
Jaedb\Search\SearchPageController:
types:
docs:
Label: 'Documents'
Table: 'File_Live'
ClassName: 'SilverStripe\Assets\File'
ClassNameShort: 'File'
Filters:
File_Live.ShowInSearch: '1'
Columns: ['File_Live.Title','File_Live.Description','File_Live.Name']
pages:
Label: 'Pages'
ClassName: 'Page'
ClassNameShort: 'Page'
Table: 'Page_Live'
Filters:
SiteTree_Live.ShowInSearch: '1'
JoinTables: ['SiteTree_Live']
Columns: ['SiteTree_Live.Title','SiteTree_Live.MenuTitle','SiteTree_Live.Content']
filters:
updated_before:
Structure: 'db'
Label: 'Updated before'
Column: 'LastEdited'
Operator: '<'
updated_after:
Structure: 'db'
Label: 'Updated after'
Column: 'LastEdited'
Operator: '>'
tags:
Structure: 'many_many'
Label: 'Tags'
ClassName: 'Tag'
Table: 'Tag'
JoinTables:
docs:
Table: 'File_Tags'
Column: 'FileID'
pages:
Table: 'Page_Tags'
Column: 'PageID'
sorts:
title_asc:
Label: 'Title (A-Z)'
Sort: 'Title ASC'
title_desc:
Label: 'Title (Z-A)'
Sort: 'Title DESC'
published_asc:
Label: 'Publish date (newest first)'
Sort: 'DatePublished DESC'
published_desc:
Label: 'Publish date (oldest first)'
Sort: 'DatePublished ASC'