An open API service indexing awesome lists of open source software.

https://github.com/jaedb/search

SilverStripe search engine
https://github.com/jaedb/search

Last synced: over 1 year ago
JSON representation

SilverStripe search engine

Awesome Lists containing this project

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 `SearchPage` instance (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.yml` to define search parameters.
* Run `dev/build` to instansiate your new configuration

# Configuration
* `types`: associative list of types to search
* `Label`: front-end field label
* `Table`: the object's primary table (note `_Live` suffix for versioned objects)
* `ClassName`: full ClassName
* `ClassNameShort`: namespaced ClassName
* `Filters`: a list of filters to apply pre-search (maps to `DataList->Filter(key => value)`)
* `Columns`: columns to search for query string matches (format `Table.Column`)
* `filters`: associative list of filter options
* `Structure`: defines the filter's relational structure (must be one of `db`, `has_one` or `has_many`)
* `Label`: front-end field label
* `Table`: relational subject's table
* `Column`: column to filter on
* `Operator`: SQL filter operator (ie `>`, `=`)
* `JoinTables`: associative list of relationship mappings (use the `key` from the `types` array)
* `Table`: relational join table
* `Column`: column to join by
* `sorts`: associative list of sort options
* `Label`: front-end field label
* `Sort`: 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'
```