A search plugin for Sylius using Elastically and Jane.
Require the plugin :
composer require monsieurbiz/sylius-search-plugin="^2"
If you are using Symfony Flex, the recipe will automatically do some actions.
For the installation without flex, follow these additional steps
Change your config/bundles.php
file to add this line for the plugin declaration:
<?php
return [
//..
MonsieurBiz\SyliusSearchPlugin\MonsieurBizSyliusSearchPlugin::class => ['all' => true],
Jane\Bundle\AutoMapperBundle\JaneAutoMapperBundle::class => ['all' => true],
];
Create the config file in config/packages/monsieurbiz_sylius_search_plugin.yaml
:
imports:
- { resource: "@MonsieurBizSyliusSearchPlugin/Resources/config/config.yaml" }
Create the route config file in config/routes/monsieurbiz_sylius_search_plugin.yaml
:
monsieurbiz_search_plugin:
resource: "@MonsieurBizSyliusSearchPlugin/Resources/config/routing.yaml"
Copy the override templates:
cp -Rv vendor/monsieurbiz/sylius-search-plugin/src/Resources/templates/* templates/
Finally configure plugin in your .env file by adding these lines at the end :
###> MonsieurBizSearchPlugin ###
MONSIEURBIZ_SEARCHPLUGIN_MESSENGER_TRANSPORT_DSN=doctrine:https://default
MONSIEURBIZ_SEARCHPLUGIN_ES_HOST=${ELASTICSEARCH_HOST:-localhost}
MONSIEURBIZ_SEARCHPLUGIN_ES_PORT=${ELASTICSEARCH_PORT:-9200}
MONSIEURBIZ_SEARCHPLUGIN_ES_URL=https://${MONSIEURBIZ_SEARCHPLUGIN_ES_HOST}:${MONSIEURBIZ_SEARCHPLUGIN_ES_PORT}/
###< MonsieurBizSearchPlugin ###
-
Install Elasticsearch 💪. See Infrastructure below.
-
Your
ProductAttribute
andProductOption
entities need to implement theMonsieurBiz\SyliusSearchPlugin\Entity\Product\SearchableInterface
interface and use theMonsieurBiz\SyliusSearchPlugin\Model\Product\SearchableTrait
trait. Example with theProductAttribute
:
namespace App\Entity\Product;
use Doctrine\ORM\Mapping as ORM;
+use MonsieurBiz\SyliusSearchPlugin\Entity\Product\SearchableInterface;
+use MonsieurBiz\SyliusSearchPlugin\Model\Product\SearchableTrait;
use Sylius\Component\Attribute\Model\AttributeTranslationInterface;
use Sylius\Component\Product\Model\ProductAttribute as BaseProductAttribute;
/**
* @ORM\Entity
* @ORM\Table(name="sylius_product_attribute")
*/
-class ProductAttribute extends BaseProductAttribute
+class ProductAttribute extends BaseProductAttribute implements SearchableInterface
{
+ use SearchableTrait;
protected function createTranslation(): AttributeTranslationInterface
{
return new ProductAttributeTranslation();
-
You need to run a diff of your doctrine's migrations:
console doctrine:migrations:diff
. Don't forget to run it! (console doctrine:migrations:migrate
) -
Run the populate command.
Documentation is available in the docs folder.
The plugin was developed for Elasticsearch 7.16.x versions. You need to have analysis-icu and analysis-phonetic elasticsearch plugin installed.
We are using Jane to create a DTO (Data-transfer object).
Generated classes are on generated
folder.
Jane configuration and JSON Schema are on src/Resources/config/jane
folder.
To rebuild generated class during plugin development, we are using :
symfony php vendor/bin/jane generate --config-file=src/Resources/config/jane/jane-configuration.php
The Elastically Client is configured in src/Resources/config/services.yaml
file.
You can customize it in your .env
file or if you want in config/services.yaml
.
Analyzers and YAML mappings are on src/Resources/config/elasticsearch
folder.