monsieurbiz / SyliusSearchPlugin

A search plugin using Elasticsearch for Sylius
MIT License
45 stars 38 forks source link
hacktoberfest sylius sylius-plugin

Banner of Sylius Search plugin

Search

Search Plugin license Tests Status Recipe Status Security Status

A search plugin for Sylius using Elastically and Jane.

Compatibility

Sylius Version PHP Version
1.11 8.0 - 8.1
1.12 8.1 - 8.2
1.13 8.1 - 8.2

Installation

If you want to use our recipes, you can configure your composer.json by running:

composer config --no-plugins --json extra.symfony.endpoint '["https://api.github.com/repos/monsieurbiz/symfony-recipes/contents/index.json?ref=flex/master","flex://defaults"]'

This is the last version using jane-php/automapper, which requires nikic/php-parser="^4.0". The next version will use jolicode/automapper, which is compatible with nikic/php-parser="^5.0".

composer require --no-progress --no-interaction nikic/php-parser="^4.0"
composer require monsieurbiz/sylius-search-plugin

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 ['all' => true], Jane\Bundle\AutoMapperBundle\JaneAutoMapperBundle::class => ['all' => true], ]; ``` Create the config file in `config/packages/monsieurbiz_sylius_search_plugin.yaml`: ```yaml imports: - { resource: "@MonsieurBizSyliusSearchPlugin/Resources/config/config.yaml" } ``` Create the route config file in `config/routes/monsieurbiz_sylius_search_plugin.yaml`: ```yaml monsieurbiz_search_plugin: resource: "@MonsieurBizSyliusSearchPlugin/Resources/config/routing.yaml" ``` Copy the override templates: ```shell 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://default MONSIEURBIZ_SEARCHPLUGIN_ES_HOST=${ELASTICSEARCH_HOST:-localhost} MONSIEURBIZ_SEARCHPLUGIN_ES_PORT=${ELASTICSEARCH_PORT:-9200} MONSIEURBIZ_SEARCHPLUGIN_ES_URL=http://${MONSIEURBIZ_SEARCHPLUGIN_ES_HOST}:${MONSIEURBIZ_SEARCHPLUGIN_ES_PORT}/ ###< MonsieurBizSearchPlugin ### ```

  1. Install Elasticsearch 💪. See Infrastructure below.

  2. Your ProductAttribute and ProductOption entities need to implement the MonsieurBiz\SyliusSearchPlugin\Entity\Product\SearchableInterface interface and use the MonsieurBiz\SyliusSearchPlugin\Model\Product\SearchableTrait trait. Example with the ProductAttribute:

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")
 */
#[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();
  1. 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)

  2. Run the populate command.

Documentation

Documentation is available in the docs folder.

Infrastructure

The plugin was developed for Elasticsearch 7.16.x versions. You need to have analysis-icu and analysis-phonetic elasticsearch plugin installed.

Other information

Jane

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

Elastically

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.