Skip to content
Symfony 2/3 bundle for integration Doctrine entities with Solr
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Command
Config
DependencyInjection
EventListener
Exception
Filter
Finder
Indexer
Manager
Query
Resources
Schema
Suggester
Tests
.gitignore
.travis.yml
MdiyakovDoctrineSolrBundle.php
README.md
_config.yml
composer.json
phpunit.xml.dist

README.md

DoctrineSolrBundle

SensioLabsInsight Build Status Latest Stable Version License Scrutinizer Code Quality

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

  1. Getting started with DoctrineSolrBundle
  2. Regular, fuzzy, wildcard, range and negative search
  3. Custom finder class
  4. Filters
  5. Schema search across multiple entities classes
  6. Suggestions
  7. Query building
  8. Console command to index entities
  9. Console command to delete entities
  10. EntityManager. How to flush an entity safe
  11. Roadmap
You can’t perform that action at this time.