SilverStripe Search

BaseIndex
in package
Uses Extensible, Configurable, Injectable, GetterSetterTrait, BaseIndexTrait

AbstractYes

Base for creating a new Solr core.

Base index settings and methods. Should be extended with at least a name for the index. This is an abstract class that can not be instantiated on it's own

Table of Contents

Properties

$boostedFields  : array<string|int, mixed>
Sets boosting at _index_ time or _query_ time. Depending on the usage of this trait [ 'FieldName' => 2, ]
$class  : array<string|int, mixed>
$client  : Client
$clientQuery  : Query
$copyFields  : array<string|int, mixed>
$defaultField  : string
$facetFields  : array<string|int, mixed>
$filterFields  : array<string|int, mixed>
$fulltextFields  : array<string|int, mixed>
$queryFactory  : QueryComponentFactory
{@link QueryComponentFactory}
$queryTerms  : array<string|int, mixed>
$schemaFactory  : SchemaFactory
{@link SchemaFactory}
$sortFields  : array<string|int, mixed>
$storedFields  : array<string|int, mixed>
$usedAllFields  : bool
usedAllFields is used to determine if the addAllFields method has been called This is to prevent a notice if there is no yml.
$fieldTypes  : mixed
Field types that can be added Used in init to call build methods from configuration yml
$retry  : bool

Methods

__construct()  : mixed
BaseIndex constructor.
addAllDateFields()  : mixed
Add all date-type fields to the given index
addAllFulltextFields()  : mixed
Add all text-type fields to the given index
addBoostedField()  : mixed
Add an abstract for the add Boosted Field to keep things consistent
addClass()  : $this
Add a class to index or query $options is not used anymore, added for backward compatibility
addCopyField()  : $this
Add a copy field
addFacetField()  : $this
Add a facet field
addFilterField()  : $this
Add a filterable field
addFulltextField()  : $this
Add a single Fulltext field
addSortField()  : $this
Add a field to sort on
addStoredField()  : BaseIndex
Add a stored/fulltext field
buildSolrQuery()  : Query
From the given BaseQuery, generate a Solarium ClientQuery object
doSearch()  : SearchResult|ArrayData|mixed
Default returns a SearchResult. It can return an ArrayData if FTS Compat is enabled
getBoostedFields()  : array<string|int, mixed>
Get the boosted fields
getClasses()  : array<string|int, mixed>
This trait requires classes to be set, so getClasses can be called.
getClient()  : Client
Get the client
getClientQuery()  : Query
Retrieve the Solarium client Query object for this index operation
getConfig()  : array<string|int, mixed>
Build a full config for all given endpoints This is to add the current index to e.g. an index or select
getCopyFields()  : array<string|int, mixed>
Return the copy fields
getDefaultField()  : string
Return the default field for this index
getFacetFields()  : array<string|int, mixed>
Get the facet fields
getFieldsForIndexing()  : array<string|int, mixed>
Get all fields that are required for indexing in a unique way
getFilterFields()  : array<string|int, mixed>
Get the filter fields
getFulltextFields()  : array<string|int, mixed>
Get the fulltext fields
getIndexName()  : string
Name of this index.
getQueryFactory()  : QueryComponentFactory
Get the QueryComponentFactory. {@link QueryComponentFactory}
getQueryTerms()  : array<string|int, mixed>
Get the final, generated terms
getSortFields()  : array<string|int, mixed>
Get the sortable fields
getStoredFields()  : array<string|int, mixed>
Get the stored field list
getSynonyms()  : string
Add synonyms. Public to be extendable
init()  : mixed
Required to initialise the fields.
isRetry()  : bool
setBoostedFields()  : $this
Boosted fields are used at index time, not at query time
setClasses()  : $this
Set the classes
setClient()  : $this
Set/override the client
setCopyFields()  : $this
Set the copy fields
setDefaultField()  : $this
Set the default field for this index
setFacetFields()  : $this
Set the facet fields
setFilterFields()  : $this
Set the filter fields
setFulltextFields()  : $this
Set the fulltext fields
setSortFields()  : $this
Set/override the sortable fields
setStoredFields()  : BaseIndex
Set/override the stored field list
uploadConfig()  : void
Upload config for this index to the given store
addAllFieldsByType()  : void
Add all database-backed text fields as fulltext searchable fields.
addFulltextFieldsForClass()  : void
Add all fields of a given type to the index
buildFactory()  : QueryComponentFactory|mixed
Build a factory to use in the SolrQuery building. {@link static::buildSolrQuery()}
doRetry()  : bool
Check if the query should be retried with spellchecking Conditions are: It is not already a retry with spellchecking Spellchecking is enabled If spellchecking is enabled and nothing is found OR it should follow spellchecking none the less There is a spellcheck output
initFromConfig()  : void
Generate the config from yml if possible
spellcheckRetry()  : SearchResult|mixed|ArrayData
Retry the query with the first collated spellcheck found.

Properties

$boostedFields

Sets boosting at _index_ time or _query_ time. Depending on the usage of this trait [ 'FieldName' => 2, ]

protected array<string|int, mixed> $boostedFields = []

$clientQuery

protected Query $clientQuery

Query that will hit the client

$copyFields

protected array<string|int, mixed> $copyFields = ['_text' => ['*']]

Fields to copy to the default fields

$defaultField

protected string $defaultField = '_text'

Default search field

$facetFields

protected array<string|int, mixed> $facetFields = []

Facet fields

$filterFields

protected array<string|int, mixed> $filterFields = []

Filterable fields

$fulltextFields

protected array<string|int, mixed> $fulltextFields = []

Fulltext fields

$queryTerms

protected array<string|int, mixed> $queryTerms = []

The query terms as an array

$schemaFactory

{@link SchemaFactory}

protected SchemaFactory $schemaFactory

Schema factory for generating the schema

$sortFields

protected array<string|int, mixed> $sortFields = []

Sortable fields

$storedFields

protected array<string|int, mixed> $storedFields = []

Stored fields

$usedAllFields

usedAllFields is used to determine if the addAllFields method has been called This is to prevent a notice if there is no yml.

protected bool $usedAllFields = false

$fieldTypes

Field types that can be added Used in init to call build methods from configuration yml

private static mixed $fieldTypes = ['FulltextFields', 'SortFields', 'FilterFields', 'BoostedFields', 'CopyFields', 'DefaultField', 'FacetFields', 'StoredFields']
Tags
array

$retry

private bool $retry = false

Signify if a retry should occur if nothing was found and there are suggestions to follow

Methods

__construct()

BaseIndex constructor.

public __construct() : mixed

addAllDateFields()

Add all date-type fields to the given index

public addAllDateFields() : mixed
Tags
throws
ReflectionException

addAllFulltextFields()

Add all text-type fields to the given index

public addAllFulltextFields() : mixed
Tags
throws
ReflectionException

addBoostedField()

Add an abstract for the add Boosted Field to keep things consistent

public abstract addBoostedField(string $field[, array<string|int, mixed>|int $options = [] ][, null|int $boost = null ]) : mixed
Parameters
$field : string
$options : array<string|int, mixed>|int = []
$boost : null|int = null

addClass()

Add a class to index or query $options is not used anymore, added for backward compatibility

public addClass( $class[, array<string|int, mixed> $options = [] ]) : $this
Parameters
$class :
$options : array<string|int, mixed> = []

unused

Return values
$this

addCopyField()

Add a copy field

public addCopyField(string $field, array<string|int, mixed> $options) : $this
Parameters
$field : string

Name of the copyfield

$options : array<string|int, mixed>

Array of all fields that should be copied to this copyfield

Return values
$this

addFacetField()

Add a facet field

public addFacetField( $field, array<string|int, mixed> $options) : $this
Parameters
$field :
$options : array<string|int, mixed>
Return values
$this

addFilterField()

Add a filterable field

public addFilterField( $filterField) : $this
Parameters
$filterField :
Return values
$this

addFulltextField()

Add a single Fulltext field

public addFulltextField(string $fulltextField[, null|string $forceType = null ][, array<string|int, mixed> $options = [] ]) : $this
Parameters
$fulltextField : string
$forceType : null|string = null
$options : array<string|int, mixed> = []
Return values
$this

addSortField()

Add a field to sort on

public addSortField( $sortField) : $this
Parameters
$sortField :
Return values
$this

addStoredField()

Add a stored/fulltext field

public addStoredField(string $field[, null|string $forceType = null ][, array<string|int, mixed> $extraOptions = [] ]) : BaseIndex
Parameters
$field : string
$forceType : null|string = null
$extraOptions : array<string|int, mixed> = []
Return values
BaseIndex

buildSolrQuery()

From the given BaseQuery, generate a Solarium ClientQuery object

public buildSolrQuery(BaseQuery $query) : Query
Parameters
$query : BaseQuery
Return values
Query

doSearch()

Default returns a SearchResult. It can return an ArrayData if FTS Compat is enabled

public doSearch(BaseQuery $query) : SearchResult|ArrayData|mixed
Parameters
$query : BaseQuery
Tags
throws
HTTPException
throws
ValidationException
throws
ReflectionException
throws
Exception
Return values
SearchResult|ArrayData|mixed

getBoostedFields()

Get the boosted fields

public getBoostedFields() : array<string|int, mixed>
Return values
array<string|int, mixed>

getClasses()

This trait requires classes to be set, so getClasses can be called.

public abstract getClasses() : array<string|int, mixed>
Return values
array<string|int, mixed>

getClient()

Get the client

public getClient() : Client
Return values
Client

getClientQuery()

Retrieve the Solarium client Query object for this index operation

public getClientQuery() : Query
Return values
Query

getConfig()

Build a full config for all given endpoints This is to add the current index to e.g. an index or select

public getConfig(array<string|int, mixed> $endpoints) : array<string|int, mixed>
Parameters
$endpoints : array<string|int, mixed>
Return values
array<string|int, mixed>

getCopyFields()

Return the copy fields

public getCopyFields() : array<string|int, mixed>
Return values
array<string|int, mixed>

getDefaultField()

Return the default field for this index

public getDefaultField() : string
Return values
string

getFacetFields()

Get the facet fields

public getFacetFields() : array<string|int, mixed>
Return values
array<string|int, mixed>

getFieldsForIndexing()

Get all fields that are required for indexing in a unique way

public getFieldsForIndexing() : array<string|int, mixed>
Return values
array<string|int, mixed>

getFilterFields()

Get the filter fields

public getFilterFields() : array<string|int, mixed>
Return values
array<string|int, mixed>

getFulltextFields()

Get the fulltext fields

public getFulltextFields() : array<string|int, mixed>
Return values
array<string|int, mixed>

getIndexName()

Name of this index.

public abstract getIndexName() : string
Return values
string

getQueryTerms()

Get the final, generated terms

public getQueryTerms() : array<string|int, mixed>
Return values
array<string|int, mixed>

getSortFields()

Get the sortable fields

public getSortFields() : array<string|int, mixed>
Return values
array<string|int, mixed>

getStoredFields()

Get the stored field list

public getStoredFields() : array<string|int, mixed>
Return values
array<string|int, mixed>

getSynonyms()

Add synonyms. Public to be extendable

public getSynonyms([ConfigStore $store = null ][, bool $defaults = true ]) : string
Parameters
$store : ConfigStore = null

Store to use to write synonyms

$defaults : bool = true

Include UK to US synonyms

Return values
string

init()

Required to initialise the fields.

public init() : mixed

It's loaded in to the non-static properties for backward compatibility with FTS Also, it's a tad easier to use this way, loading the other way around would be very memory intensive, as updating the config for each item is not efficient

isRetry()

public isRetry() : bool
Return values
bool

setBoostedFields()

Boosted fields are used at index time, not at query time

public setBoostedFields(array<string|int, mixed> $boostedFields) : $this
Parameters
$boostedFields : array<string|int, mixed>
Return values
$this

setClasses()

Set the classes

public setClasses(array<string|int, mixed> $class) : $this
Parameters
$class : array<string|int, mixed>
Return values
$this

setClient()

Set/override the client

public setClient(Client $client) : $this
Parameters
$client : Client
Return values
$this

setCopyFields()

Set the copy fields

public setCopyFields(array<string|int, mixed> $copyField) : $this
Parameters
$copyField : array<string|int, mixed>
Return values
$this

setDefaultField()

Set the default field for this index

public setDefaultField(string $defaultField) : $this
Parameters
$defaultField : string
Return values
$this

setFacetFields()

Set the facet fields

public setFacetFields(array<string|int, mixed> $facetFields) : $this
Parameters
$facetFields : array<string|int, mixed>
Return values
$this

setFilterFields()

Set the filter fields

public setFilterFields(array<string|int, mixed> $filterFields) : $this
Parameters
$filterFields : array<string|int, mixed>
Return values
$this

setFulltextFields()

Set the fulltext fields

public setFulltextFields(array<string|int, mixed> $fulltextFields) : $this
Parameters
$fulltextFields : array<string|int, mixed>
Return values
$this

setSortFields()

Set/override the sortable fields

public setSortFields(array<string|int, mixed> $sortFields) : $this
Parameters
$sortFields : array<string|int, mixed>
Return values
$this

setStoredFields()

Set/override the stored field list

public setStoredFields(array<string|int, mixed> $storedFields) : BaseIndex
Parameters
$storedFields : array<string|int, mixed>
Return values
BaseIndex

addAllFieldsByType()

Add all database-backed text fields as fulltext searchable fields.

protected addAllFieldsByType([string $dbType = DBString::class ]) : void

For every class included in the index, examines those classes and all parent looking for "DBText" database fields (Varchar, Text, HTMLText, etc) and adds them all as fulltext searchable fields.

Note, there is no check on boosting etc. That needs to be done manually.

Parameters
$dbType : string = DBString::class
Tags
throws
ReflectionException

addFulltextFieldsForClass()

Add all fields of a given type to the index

protected addFulltextFieldsForClass(array<string|int, mixed> $fields[, string $dbType = DBString::class ]) : void
Parameters
$fields : array<string|int, mixed>

The fields on the DataObject

$dbType : string = DBString::class

Class type the reflection should extend

Tags
throws
ReflectionException

doRetry()

Check if the query should be retried with spellchecking Conditions are: It is not already a retry with spellchecking Spellchecking is enabled If spellchecking is enabled and nothing is found OR it should follow spellchecking none the less There is a spellcheck output

protected doRetry(BaseQuery $query, Result $result, SearchResult $searchResult) : bool
Parameters
$query : BaseQuery
$result : Result
$searchResult : SearchResult
Return values
bool

initFromConfig()

Generate the config from yml if possible

protected initFromConfig(array<string|int, mixed>|null $config) : void
Parameters
$config : array<string|int, mixed>|null

        
On this page

Search results