PHPackages                             silverstripe/silverstripe-forager-bifrost - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. silverstripe/silverstripe-forager-bifrost

ActiveSilverstripe-vendormodule[Search &amp; Filtering](/categories/search)

silverstripe/silverstripe-forager-bifrost
=========================================

A Silverstripe Search add-on for silverstripe/silverstripe-forager

2.0.1(5mo ago)02.3k—0%[2 issues](https://github.com/silverstripeltd/silverstripe-forager-bifrost/issues)2BSD-3-ClausePHPPHP ^8.3CI passing

Since Jul 30Pushed 5mo ago6 watchersCompare

[ Source](https://github.com/silverstripeltd/silverstripe-forager-bifrost)[ Packagist](https://packagist.org/packages/silverstripe/silverstripe-forager-bifrost)[ Docs](https://github.com/silverstripeltd/silverstripe-forager-bifrost)[ RSS](/packages/silverstripe-silverstripe-forager-bifrost/feed)WikiDiscussions 1 Synced 1mo ago

READMEChangelog (10)Dependencies (8)Versions (14)Used By (2)

🧺 Silverstripe Forager &gt; [![](https://camo.githubusercontent.com/f4d745abd42963241cf1ededf8d9f506552a8c6db022508d4fb7103de7beac86/68747470733a2f2f7777772e73696c7665727374726970652e636f6d2f66617669636f6e2e69636f)](https://camo.githubusercontent.com/f4d745abd42963241cf1ededf8d9f506552a8c6db022508d4fb7103de7beac86/68747470733a2f2f7777772e73696c7665727374726970652e636f6d2f66617669636f6e2e69636f) Silverstripe Search
=================================================================================================================================================================================================================================================================================================================================================================================================================================

[](#-silverstripe-forager---silverstripe-search)

This module provides the ability to index content for a Silverstripe Search engine through the 🌈 Bifröst - the API for Silverstripe's Search service.

This module **does not** provide any method for performing searches on your engines. See the [Searching](#searching) section below for some suggestions.

- [🧺 Silverstripe Forager &gt; ![](https://camo.githubusercontent.com/f4d745abd42963241cf1ededf8d9f506552a8c6db022508d4fb7103de7beac86/68747470733a2f2f7777772e73696c7665727374726970652e636f6d2f66617669636f6e2e69636f) Silverstripe Search](#-silverstripe-forager--img-srchttpswwwsilverstripecomfaviconico-styleheight40px-vertical-alignmiddle-silverstripe-search)
    - [Installation](#installation)
    - [Engine vs Index](#engine-vs-index)
    - [Specify environment variables](#specify-environment-variables)
        - [Understanding your engine prefix and suffix:](#understanding-your-engine-prefix-and-suffix)
    - [Configuration](#configuration)
        - [File attachments for content extraction](#file-attachments-for-content-extraction)
    - [Additional documentation](#additional-documentation)
    - [Searching](#searching)

Installation
------------

[](#installation)

```
composer require silverstripe/silverstripe-forager-bifrost
```

Engine vs Index
---------------

[](#engine-vs-index)

Important

**TL;DR:**
For all intents and purposes, "engine" and "index" are synonomous. If we refer to something as "engine", but the Discoverer module is asking for an "index", then you simply need to give it the data you have for your engine.

The Discoverer module is built to be service agnostic; meaning, you can use it with any search provider, as long as there is an adaptor (like this module) for that service.

When Discoverer refers to an "index", it is talking about the data store used for housing your content. These data stores are known by different names across different search providers. Algolia and Elasticsearch call them "indexes", Typesense calls them "collections", App Search calls them "engines". Discoverer had to call them **something** in its code, and it chose to call then "indexes"; Silverstripe Search, however, calls them "engines".

Actions apply in the same way to all of the above. In Silverstripe Search, the action of "indexing" is the action of adding data to your engine, where it is said to be "indexed". Updating that data is commonly referred to as "re-indexing".

Specify environment variables
-----------------------------

[](#specify-environment-variables)

To integrate with Silverstripe Search, define environment variables containing your endpoint, engine prefix, and management API key.

```
BIFROST_ENDPOINT="https://abc.provided.domain"
BIFROST_ENGINE_PREFIX="" # See "Understanding your engine prefix and suffix" below
BIFROST_MANAGEMENT_API_KEY="abc.123.xyz"

```

### Understanding your engine prefix and suffix:

[](#understanding-your-engine-prefix-and-suffix)

Important

**TL;DR:**

- All Silverstripe Search engine names follow a 4 slug format like this: `search---`
- Your `` is everything except `-`; so, it's just `search--`

For example:

EngineEngine prefixEngine suffixsearch-acmecorp-prod-mainsearch-acmecorp-prodmainsearch-acmecorp-prod-incsearch-acmecorp-prodincsearch-acmecorp-uat-mainsearch-acmecorp-uatmainsearch-acmecorp-uat-incsearch-acmecorp-uatinc**Why?**

Because you probably have more than one environment type that you're running search on (e.g. Production and UAT), and (generally speaking) you should have different engines for each of those environments. So, you can't just hardcode the entire engine name into your project, because that code doesn't change between environments.

Whenever you make a query, Forager will ask you for the "index" name; you will actually want to provide only the ``. We will then take `BIFROST_ENGINE_PREFIX` and your ``, put them together, and that's what will be queried. This allows you to set `BIFROST_ENGINE_PREFIX` differently for each environment, while having your `` hardcoded in your project.

Configuration
-------------

[](#configuration)

Warning

Once you add a field to an index you cannot change its name or type without deleting the engine so choose field names and set their types carefully

The most notable configuration surface is the schema, which determines how data is stored in your index. There are five types of data supported:

- `text` (default)
- `date`
- `number`
- `geolocation`
- `binary` (only supported for the `_attachment` field - see below)

You can specify these data types in the `options` node of your fields.

```
SilverStripe\Forager\Service\IndexConfiguration:
  indexes:
    :
      includeClasses:
        SilverStripe\CMS\Model\SiteTree:
          fields:
            title: true
            summary_field:
              property: SummaryField
              options:
                type: text
```

Continuing with the `acmecorp` engine examples; they have 2 engines per environment, so it would look something like this:

```
SilverStripe\Forager\Service\IndexConfiguration:
  indexes:
    main:
      includeClasses:
        ...
    inc:
      includeClasses:
        ...
```

### File attachments for content extraction

[](#file-attachments-for-content-extraction)

Firstly, you will need to set this environment variable. This will apply an extension to the `File` class, and allow you to use the `_attachment` field (detailed below).

```
SEARCH_INDEX_FILES=1
```

Silverstripe Search supports content extraction for many different file types. These can be attached to your Documents using an `_attachment` field of type `binary`.

This field needs to contain a base 64 encoded string of binary for the file you wish to process. You should also define the special `body` field with type `text` which will automatically be created to store the extracted file content.

```
SilverStripe\Forager\Service\IndexConfiguration:
  indexes:
    :
      includeClasses:
        SilverStripe\Assets\File:
          fields:
            title: true
            body: true # this is the field that will contain the extract content
            _attachment:
              property: getBase64String
              options:
                type: binary
```

Where `getBase64String` is a method in our `FileExtension` - which is applied to the `File` class by default as part of this module.

Additional documentation
------------------------

[](#additional-documentation)

Majority of documentation is provided by the Forager module. A couple in particular that might be useful to you are:

- [Configuration](https://github.com/silverstripe/silverstripe-search-service/blob/2/docs/en/configuration.md)
- [Customisation](https://github.com/silverstripe/silverstripe-search-service/blob/2/docs/en/customising.md)

Searching
---------

[](#searching)

Silverstripe Search provides support for searching through its PHP SDK:

- [Discoverer &gt; Bifröst](https://github.com/silverstripeltd/silverstripe-discoverer-bifrost)
- [Discoverer &gt; Theme](https://github.com/silverstripeltd/silverstripe-discoverer-theme) (optional)

###  Health Score

45

—

FairBetter than 93% of packages

Maintenance70

Regular maintenance activity

Popularity21

Limited adoption so far

Community19

Small or concentrated contributor base

Maturity62

Established project with proven stability

 Bus Factor1

Top contributor holds 85% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~40 days

Recently: every ~33 days

Total

13

Last Release

168d ago

Major Versions

1.x-dev → 2.0.02025-10-24

PHP version history (2 changes)1.0.0PHP ^8.1

2.0.0PHP ^8.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/afbb3dcc9ef29c1a6eedd6addcae5fce9ab1271915a85a4c349301b71237368d?d=identicon)[silverstripe-machine01](/maintainers/silverstripe-machine01)

---

Top Contributors

[![chrispenny](https://avatars.githubusercontent.com/u/505788?v=4)](https://github.com/chrispenny "chrispenny (34 commits)")[![blueo](https://avatars.githubusercontent.com/u/948122?v=4)](https://github.com/blueo "blueo (3 commits)")[![HeyImPhil](https://avatars.githubusercontent.com/u/4695076?v=4)](https://github.com/HeyImPhil "HeyImPhil (2 commits)")[![adunn49](https://avatars.githubusercontent.com/u/21965646?v=4)](https://github.com/adunn49 "adunn49 (1 commits)")

---

Tags

searchsilverstripeSilverstripe-CMSbifrost

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/silverstripe-silverstripe-forager-bifrost/health.svg)

```
[![Health](https://phpackages.com/badges/silverstripe-silverstripe-forager-bifrost/health.svg)](https://phpackages.com/packages/silverstripe-silverstripe-forager-bifrost)
```

###  Alternatives

[silverstripe/solr

Solr integration for SilverStripe. Note that this is NOT related to the silverstripe/fulltext package.

1914.0k](/packages/silverstripe-solr)[g4b0/searchable-dataobjects

This module adds DataObjects to frontend search

254.9k](/packages/g4b0-searchable-dataobjects)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
