mdiyakov / doctrine-solr-bundle
Symfony 2 bundle for integration Doctrine entities with Solr
Installs: 29
Dependents: 0
Suggesters: 0
Security: 0
Stars: 12
Watchers: 3
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: ^5.4 || >=7.0 <7.3
- doctrine/doctrine-bundle: ^1.5.0
- doctrine/orm: ~2.4.0 || ~2.5.0
- nelmio/solarium-bundle: ~2.1
- solarium/solarium: ^3.0
- symfony/framework-bundle: ^2.3 || ^3.0
- symfony/property-access: >=2.3.0
Requires (Dev)
- phpunit/phpunit: ^4.7||~5
This package is auto-updated.
Last update: 2024-12-25 21:21:16 UTC
README
DoctrineSolrBundle is a Symfony bundle designed to mitigate Solr usage in symfony projects
Features
- Auto-indexing doctrine entities in Solr
- Supports wildcard, fuzzy & negative searches by specific entity fields
- Supports Range searches by specific entity fields
- Supports Boosting a Term by specific entity fields
- Supports Solr SuggestComponent
- Supports filters by entity fields or custom symfony service before indexing
- Auto-resolving search results in Doctrine entities
- Supports implementation of separate finder class for particular entity class
- Flexible query building interface
- Cross-search over different entity classes
Installation
Step 1 Download DoctrineSolrBundle using composer
$ composer require mdiyakov/doctrine-solr-bundle
Composer will install the bundle to your project's vendor/mdiyakov/doctrine-solr-bundle directory.
Step 2
Enable the bundle in the kernel :
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new Nelmio\SolariumBundle\NelmioSolariumBundle(),
new Mdiyakov\DoctrineSolrBundle\MdiyakovDoctrineSolrBundle(),
// ...
);
}
You have to install "NelmioSolariumBundle" also because it's used by MdiyakovDoctrineSolrBundle
Step 3 : Quick start with DoctrineSolrBundle
Prerequisites
- Solr schema.yml created and solr core is initialized
- Solr schema.yml unique field is "uid"
- Solr schema.yml consists "document_id", "document_title" and "discriminator" fields
- AppBundle\Entity\MyEntity is created and has "id" and "title" fields
DoctrineSolrBundle is using "NelmioSolariumBundle" for solarium integration. So you need to set a configuration to use it. Here is minimum config:
nelmio_solarium: ~
The default solr endpoint will be used in this case (http://localhost:8983/solr)
Init bundle configuration in config.yml. Quick example:
mdiyakov_doctrine_solr: indexed_entities: my_entity: class: AppBundle\Entity\MyEntity schema: my_schema config: - { name: config_field_name, value: config_field_value } schemes: my_schema: document_unique_field: { name: 'uid' } config_entity_fields: - { config_field_name: 'config_field_name', document_field_name: 'discriminator', discriminator: true } fields: - { entity_field_name: 'id', document_field_name: 'document_id', field_type: int, entity_primary_key: true } - { entity_field_name: 'title', document_field_name: 'document_title', suggester: 'title' }
As a result "id" and "title" fields of "AppBundle\Entity\MyEntity" will be synced with Solr each time "AppBundle\Entity\MyEntity" is created, updated or removed.
If you use doctrine/orm < 2.5 then you have to add an annotation to "AppBundle\Entity\MyEntity" class:
@ORM\EntityListeners({"Mdiyakov\DoctrineSolrBundle\EventListener\DoctrineEntityListener"})
To search "AppBundle\Entity\MyEntity" use the following code:
// MyController //... // @var \Mdiyakov\DoctrineSolrBundle\Finder\ClassFinder $finder $finder = $this->get('ds.finder')->getClassFinder(MyEntity::class); /** @var MyEntity[] $searchResults */ $searchResults = $finder->findSearchTermByFields($searchTerm, ['title']); //...
Next steps
- Getting started with DoctrineSolrBundle
- Regular, fuzzy, wildcard, range and negative search
- Custom finder class
- Filters
- Schema search across multiple entities classes
- Suggestions
- Query building
- Console command to index entities
- Console command to delete entities
- EntityManager. How to flush an entity safe
- Roadmap