Coder Social home page Coder Social logo

mdiyakov / doctrinesolrbundle Goto Github PK

View Code? Open in Web Editor NEW
12.0 3.0 0.0 140 KB

Symfony 2/3 bundle for integration Doctrine entities with Solr

PHP 100.00%
solr symfony-bundle symfony2 bundle doctrine search fulltext-search php symfony symfony3

doctrinesolrbundle's Introduction

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

doctrinesolrbundle's People

Contributors

mdiyakov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.