Search engine for Silverstripe websites - forked from jaedb/search

Installs: 52

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 1

Type:silverstripe-vendormodule

1.0.8 2020-10-01 02:38 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 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 (or add _config/search.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 many_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 (if sorts are not defined, results will be sorted by default to Title ASC)
    • Label: front-end field label
    • Sort: SQL sort string
  • defaults: Default attributes or settings, as opposed to those submitted through the search form (currently only configured to use sort).

Example configuration

---
Name: search
Before:
    - '#site'
---
PlasticStudio\Search\SearchPageController:
  types:
    docs:
      Label: 'Documents'
      Table: 'File_Live'
      ClassName: 'SilverStripe\Assets\File'
      ClassNameShort: 'File'
      Filters:
        File_Live.ShowInSearch: '1'
        File_Live.ClassName:  '''Silverstripe\\Assets\\File''' # You need to TRIPLE-ESCAPE in order to pass this as a string to the query
      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'
      authors:
        Structure: 'many_many'
        Label: 'Authors'
        ClassName: 'Member'
        Table: 'Member'
        JoinTables:
          pages: 
            Table: 'Page_Authors'
            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'
  defaults:
    sort: 'Title ASC'