/seal-symfony-bundle

An integration of CMS-IG SEAL search abstraction via a Bundle into the Symfony Framework. Part of the https://github.com/php-cmsig/search project. READ-ONLY Repository

Primary LanguagePHPMIT LicenseMIT

SEAL Logo with an abstract seal sitting on a telescope.
Logo created by Meine Wilma

SEAL
Symfony Integration



Integration of the CMS-IG — Search Engine Abstraction Layer (SEAL) into Symfony.

Note: This is part of the cmsig/search project create issues in the main repository.

Note: This project is heavily under development and any feedback is greatly appreciated.

Installation

Use composer for install the package:

composer require cmsig/seal-symfony-bundle

Also install one of the listed adapters.

List of adapters

The following adapters are available:

Additional Wrapper adapters:

Creating your own adapter? Add the seal-php-adapter Topic to your Github Repository.

Configuration

The following code shows how to configure the package:

# config/packages/cmsig_seal.yaml

cmsig_seal:
    schemas:
        app:
            dir: '%kernel.project_dir%/config/schemas'
            # engine: 'default'
    engines:
        default:
            adapter: '%env(ENGINE_URL)%'

A more complex configuration can be here found:

# config/packages/cmsig_seal.yaml

cmsig_seal:
    schemas:
        app:
            dir: '%kernel.project_dir%/config/schemas/app'
        other:
            dir: '%kernel.project_dir%/config/schemas/other'
            engine: algolia
    engines:
        algolia:
            adapter: 'algolia://%env(ALGOLIA_APPLICATION_ID)%:%env(ALGOLIA_ADMIN_API_KEY)%'
        elasticsearch:
            adapter: 'elasticsearch://127.0.0.1:9200'
        meilisearch:
            adapter: 'meilisearch://127.0.0.1:7700'
        memory:
            adapter: 'memory://'
        opensearch:
            adapter: 'opensearch://127.0.0.1:9200'
        redisearch:
            adapter: 'redis://supersecure@127.0.0.1:6379'
        solr:
            adapter: 'solr://127.0.0.1:8983'
        typesense:
            adapter: 'typesense://S3CR3T@127.0.0.1:8108'

        # ...
        multi:
            adapter: 'multi://elasticsearch?adapters[]=opensearch'
        read-write:
            adapter: 'read-write://elasticsearch?write=multi'
    index_name_prefix: ''

Usage

The default engine is available as Engine:

class Some {
    public function __construct(
        private readonly \CmsIg\Seal\EngineInterface $engine,
    ) {
    }
}

A specific engine is available under the config key suffix with Engine:

class Some {
    public function __construct(
        private readonly \CmsIg\Seal\EngineInterface $algoliaEngine,
    ) {
    }
}

Multiple engines can be accessed via the EngineRegistry:

class Some {
    private Engine $engine;

    public function __construct(
        private readonly \CmsIg\Seal\EngineRegistry $engineRegistry,
    ) {
        $this->engine = $this->engineRegistry->get('algolia');
    }
}

How to create a Schema file and use your Engine can be found SEAL Documentation.

Commands

The bundle provides the following commands:

Create configured indexes

bin/console cmsig:seal:index-create --help

Drop configured indexes

bin/console cmsig:seal:index-drop --help

Reindex configured indexes

bin/console cmsig:seal:reindex --help

Authors