* FIX Add namespaces in markdown docs * FIX Convert doc [link] to [link-text](link-uri)
2.8 KiB
title: Fulltext Search summary: Fulltext search allows sophisticated searching on text content.
FulltextSearchable
Fulltext search allows advanced search criteria for searching words within a text based data column. While basic Fulltext search can be achieved using the built-in MySQLDatabase class a more powerful wrapper for Fulltext search is provided through a module.
Adding Fulltext Support to MySQLDatabase
The MySQLDatabase class defaults to creating tables using the InnoDB storage engine. As Fulltext search in MySQL requires the MyISAM storage engine, any DataObject you wish to use with Fulltext search must be changed to use MyISAM storage engine.
You can do so by adding this static variable to your class definition:
:::php
<?php
class MyDataObject extends DataObject {
private static $create_table_options = array(
'MySQLDatabase' => 'ENGINE=MyISAM'
);
}
The FulltextSearchable extension will add the correct Fulltext
indexes to the data model.
Fulltext Filter
SilverStripe provides a FulltextFilter which you can use to perform custom fulltext searches on DataLists.
Example DataObject:
:::php
class SearchableDataObject extends DataObject {
private static $db = array(
"Title" => "Varchar(255)",
"Content" => "HTMLText",
);
private static $indexes = array(
'SearchFields' => array(
'type' => 'fulltext',
'columns' => ['Title', 'Content'],
)
);
private static $create_table_options = array(
'MySQLDatabase' => 'ENGINE=MyISAM'
);
}
Performing the search:
:::php
SearchableDataObject::get()->filter('SearchFields:Fulltext', 'search term');
If your search index is a single field size, then you may also specify the search filter by the name of the field instead of the index.