Indexing
Configuration
Each Doctrine Entity is synced with a given search "index", which contains all of the searchable records for that model.
In other words, you can think of each index like a MySQL table.
By default, each entity will be persisted to an index matching the model's typical "table" name.
Typically, this is the plural form of the model name; however, you are free to customize the model's index by overriding the searchableAs
method on the model:
class PostRepository extends SearchableRepository
{
/**
* @return string
*/
public function searchableAs()
{
return 'posts_index';
}
}
By default, the entire entity will be serialized (based on the available getters) and will be persisted to its search index.
If you would like to customize the data that is synchronized to the search index,
you may override the toSearchableArray
method on the entity:
class Post implements Searchable
{
public $id;
/**
* @return array
*/
public function toSearchableArray()
{
return [
'title' => $this->title,
'content' => $this->content
];
}
}
Please note that currently it is required to have the primary key (
id
) of the entity marked as public to make it possible to index and search them.
Batch indexing
If you are installing Scout into an existing project,
you may already have database records you need to import into your search driver.
Scout provides an import
Artisan command that you may use to import all of your existing records into your search indexes:
php artisan doctrine:scout:import "App\Entities\Post"
Adding entities
Once you have activated the LaravelDoctrine\Scout\SearchableExtension
extension,
all you need to do is persist
and flush
an entity instance and it will automatically be added to your search index.
$post = new App\Entities\Post;
// ...
$em->persist($post);
$em->flush();
Updating entities
To update a searchable model, you only need to update the entity instance's properties and flush
the entity to your database.
Scout will automatically persist the changes to your search index:
$post = $em->find(Post::class, 1);
// Update the post
$em->flush();
Removing entities
To remove a record from your index, simply remove
and flush
the entity from the database.
$post = $em->find(Post::class, 1);
$em->remove($post);
$em->flush();