Introduction¶
The MassiveSearchBundle provides an extensible, localized search abstraction which is concerned primarily with providing “site” search capabilities.
What it does¶
It allows you to map documents using XML (or a custom driver), index them with a search adapter and search for them. The search “results” (documents) are returned in a format focused on the use case of providing a list of search results on which the user clicks.
For example, a typical use case would be to provide a search results page as follows:
+--------+ Search result 1
| |
| <img> | Some description of this result
| |
+--------+
+--------+ Search result 2
| |
| <img> | Some description for search result 2
| |
+--------+
Just to be clear: it is not designed for anything else.
Quick example¶
This example will assume you want to index a Product
entity using the
Doctrine ORM.
Note
The bundle is in no way coupled to the Doctrine ORM, and it is possible to use it with any persistence system.
Enable the Doctrine ORM support in your main configuration:
massive_search:
persistence:
doctrine_orm:
enabled: true
And enable one of the Search Adapters
Create your model in <YourBundle>/Entity/Product.php
:
<?php
// <YourBundle>/Entity/Product.php
namespace Acme\YourBundle\Entity\Product;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="product")
*/
class Product
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=100)
*/
protected $name;
/**
* @ORM\Column(type="decimal", scale=2)
*/
protected $price;
/**
* @ORM\Column(type="text")
*/
protected $description;
}
Place the following mapping file in the
Resources/config/massive-search/Product.xml
:
<!-- /path/to/YourBundle/Resources/config/massive-search/Product.xml -->
<massive-search-mapping xmlns="http://massive.io/schema/dic/massive-search-mapping">
<mapping class="Model\Product">
<index value="product" />
<id property="id" />
<title property="name" />
<url expr="'/path/to/' ~ object.id" />
<description property="body" />
<image expr="'/assets/images/' ~ object.type" />
<fields>
<field name="title" type="string" />
<field name="body" type="string" />
</fields>
</mapping>
</massive-search-mapping>
Now, when you persist your Product
with Doctrine ORM it should be
automatically indexed by the configured search adapter.