Search by

fromholdio / silverstripe-sherlock

dizzystuff

A SilverStripe module that enables you to build a project-specific 'search engine' with fulltext search with relevance and weighting.

Package info

github.com/fromholdio/silverstripe-sherlock

Type:silverstripe-vendormodule

pkg:composer/fromholdio/silverstripe-sherlock

Statistics

Installs: 698

Dependents: 1

Suggesters: 0

Stars: 2

Open Issues: 0

2.0.0 2026-10-25 08:35 UTC

This package is auto-updated.

Last update: 2026-10-25 08:35:59 UTC


README

A SilverStripe module that enables you to build a project-specific "search engine" with fulltext search with relevance and weighting.

This module by itself does not do much - it provides the framework to implement a 'search engine' specific to your project.

See fromholdio/silverstripe-sherlock-pages for an example implementation, which uses this core module and implements a search engine for all Pages, with sorting by relevance, and weights matches to Title and MenuTitle higher than matches within content.

Apologies, I haven't had the chance to write much documentation for this yet. See the source of the above-referenced module, or submit an issue with any question you may have in the meantime.

At a high level this aims to:

  • Fulltext search
  • Use fulltext relevance scores and order results by this
  • Create and search multiple fulltext indexes in one search, add different weighting to each index's relevance score and order results accordingly
  • Define search fields that go directly to the first found result if matched (say, if the search phrase is an exact page/dataobject title, or urlsegment, match - totally optional)
  • Maintain search logs for future analytics/reporting
  • Provide idempotent search engine build task, to maintain entries

Requirements

Recommended

Installation

composer require fromholdio/silverstripe-sherlock

Detail

Detail and usage examples to come.

See fromholdio/silverstripe-sherlock-pages for usage example.

Running the tests

The PHPUnit suite lives in tests/php. The tests save records to a temporary test database, so the database user must be able to create databases, as root can.

From a standalone clone of this module:

composer install
SS_DATABASE_CLASS=MySQLDatabase SS_DATABASE_SERVER=127.0.0.1 SS_DATABASE_USERNAME=root \
SS_DATABASE_PASSWORD=root SS_DATABASE_NAME=SS_tests vendor/bin/phpunit

The suite starts from the CMS test bootstrap, which creates an app/ folder holding the Page and PageController classes the CMS needs when the module is installed on its own. Git ignores that folder.

To Do

  • Make use of the search logs in the form of intelligent/interesting search analytics reports
  • Only require silverstripe-framework rather than silverstripe-cms
  • Thorough documentation

Thanks & Acknowledgements

Thanks to these most excellent projects for providing inspiration