mirror of
https://github.com/silverstripe/silverstripe-fulltextsearch
synced 2024-10-22 14:05:29 +02:00
76 lines
2.0 KiB
Markdown
76 lines
2.0 KiB
Markdown
# Advanced configuration
|
|
|
|
## Facets
|
|
|
|
## Multiple indexes
|
|
|
|
Multiple indexes can be created and searched independently, but if you wish to override an existing
|
|
index with another, you can use the `$hide_ancestor` config.
|
|
|
|
```php
|
|
use SilverStripe\Assets\File;
|
|
use My\Namespace\Index\MyIndex;
|
|
|
|
class MyReplacementIndex extends MyIndex
|
|
{
|
|
private static $hide_ancestor = MyIndex::class;
|
|
|
|
public function init()
|
|
{
|
|
parent::init();
|
|
|
|
$this->addClass(File::class);
|
|
$this->addFulltextField('Title');
|
|
}
|
|
}
|
|
```
|
|
|
|
You can also filter all indexes globally to a set of pre-defined classes if you wish to
|
|
prevent any unknown indexes from being automatically included.
|
|
|
|
```yaml
|
|
SilverStripe\FullTextSearch\Search\FullTextSearch:
|
|
indexes:
|
|
- MyReplacementIndex
|
|
- CoreSearchIndex
|
|
```
|
|
|
|
## Synonyms
|
|
|
|
## Spell check
|
|
|
|
## Boosting/Weighting
|
|
|
|
Results aren't all created equal. Matches in some fields are more important
|
|
than others; for example, a page `Title` might be considered more relevant to the user than terms in the `Content` field.
|
|
|
|
To account for this, a "weighting" (or "boosting") factor can be applied to each searched field. The default value is `1.0`, anything below that will decrease the relevance, anything above increases it.
|
|
|
|
To adjust the relative values, pass them in as the third argument to your `addSearchTerm()` call:
|
|
|
|
```php
|
|
use My\Namespace\Index\MyIndex;
|
|
use SilverStripe\FullTextSearch\Search\Queries\SearchQuery;
|
|
use Page;
|
|
|
|
$query = SearchQuery::create()
|
|
->addSearchTerm(
|
|
'fire',
|
|
null, // don't limit the classes to search
|
|
[
|
|
Page::class . '_Title' => 1.5,
|
|
Page::class . '_Content' => 1.0,
|
|
Page::class . '_SecretParagraph' => 0.1,
|
|
]
|
|
);
|
|
$results = singleton(MyIndex::class)->search($query);
|
|
```
|
|
|
|
This will ensure that `Title` is given higher priority for matches than `Content`, which is well above `SecretParagraph`.
|
|
|
|
## Indexing related objects
|
|
|
|
## Subsites
|
|
|
|
## Adding new fields
|