2017 © Pedro Peláez
 

symfony-bundle solr-bundle

Symfony2 Solr integration bundle

image

tapronto/solr-bundle

Symfony2 Solr integration bundle

  • Monday, January 28, 2013
  • by ashton
  • Repository
  • 1 Watchers
  • 2 Stars
  • 65 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 4 Versions
  • 0 % Grown

The README.md

This Bundle provides a simple API to index and query a Solr Index., (*1)

Installation

Solr-Server, (*2)

Follow the installation instructions in this Tutorial, (*3)

PHP-Extension, (*4)

    sudo pecl install -n solr-beta

Bundle, (*5)

  1. Register bundle in AppKernel.php, (*6)

    # app/AppKernel.php
    
    $bundles = array(
        // ...
        new FS\SolrBundle\FSSolrBundle(),
        // ...
    );
  2. Add Bundle to autoload, (*7)

    # app/autoload.php
    
    $loader->registerNamespaces(array(
        // ...
        'FS' => __DIR__.'/../vendor/bundles',
        // ...
    ));

Configuration

You have to setup the connection options, (*8)

    # app/config/config.yml

    fs_solr:
        solr:
            hostname: localhost
            port: 8983
            path:
                core0: /solr/core0
                core1: /solr/core1
        auto_index: true|false
        entity_manager: default 

Usage

To put an entity to the index, you must add some annotations to your entity:, (*9)

    // your Entity

    // ....
    use FS\SolrBundle\Doctrine\Annotation as Solr;

    /**
     * 
     *
     * @Solr\Document(repository="Full\Qualified\Class\Name")
     * @ORM\Table()
     */
    class Post
    {
        /**
         * @Solr\Id
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;

        /**
         *
         * @Solr\Field(type="string")
         *
         * @ORM\Column(name="title", type="string", length=255)
         */
        private $title = '';

        /**
         * 
         * @Solr\Field(type="string")
         *
         * @ORM\Column(name="text", type="text")
         */
        private $text = '';

        /**
         * @Solr\Field(type="date")
         *
         * @ORM\Column(name="created_at", type="datetime")
         */
        private $created_at = null;
    }

If you persist this entity, it will put automaticlly to the index. Update and delete happens automatically too., (*10)

To query the index you have to call some services., (*11)

    $query = $this->get('solr')->createQuery('AcmeDemoBundle:Post');
    $query->addSearchTerm('title', 'my title');
    $query->addField('id');
    $query->addField('text');

    $result = $query->getResult();

The $result array contains all found entities. The solr-service does all mappings from SolrDocument to your entity for you. In this case only the fields id and text will be mapped (addField()), so title and created_at will be empty. If nothing was found $result is empty., (*12)

If no field was explict add, all fields will be mapped., (*13)

    $query = $this->get('solr')->createQuery('AcmeDemoBundle:Post');
    $query->addSearchTerm('title', 'my title');

    $result = $result = $query->getResult();

The pervious examples have queried only the field 'title'. You can also query all fields with a string., (*14)

    $query = $this->get('solr')->createQuery('AcmeDemoBundle:Post');
    $query->queryAllFields('my title);

    $result = $query->getResult();

To index your entities manually, you can do it the following way:, (*15)

    $this->get('solr')->addDocument($entity);
    $this->get('solr')->updateDocument($entity);
    $this->get('solr')->deleteDocument($entity);

The delete action needs the id of the entity., (*16)

If you specify your own repository you must extend the FS\SolrBundle\Repository\Repository class. The useage is the same like Doctrine-Repositories:, (*17)

$myRepository = $this->get('solr')->getRepository('AcmeDemoBundle:Post');
$result = $myRepository->mySpecialFindMethod();

If you haven't declared a concrete repository in your entity and you calling $this->get('solr')->getRepository('AcmeDemoBundle:Post'), you will get an instance of FS\SolrBundle\Repository\Repository., (*18)

MongoDB

All this functionality is also avaiable for mongo-db entities. The entity configuration via annotations is absolutly the same., (*19)

Use multiple Cores

Solr supports multiple indexies. If you have different languages in your application, use can index your documents in different indexies., (*20)

The setup is easy:, (*21)

Under the path option, you can specify your different indexies., (*22)

        path:
                core0: /solr/core0
                core1: /solr/core1

In this case the default core is core0. If you use multiple core, then the auto-index functionality should be disabled. In other case all document will index in one core. To disable use the flag auto_index in your config (default value is true)., (*23)

To index documents with the addDocument method requires a concrete core:, (*24)

    $this->get('solr')->core('core0')->addDocument($document);

Commands

There are comming two commands with this bundle:, (*25)

  • solr:index:clear - delete all documents in the index
  • solr:synchronize - synchronize the db with the index. You have to specify an entity.

The Versions

28/01 2013

dev-master

9999999-dev https://github.com/floriansemm/SolrBundle

Symfony2 Solr integration bundle

  Sources   Download

The Requires

 

search symfony index solr

03/11 2012

0.2.1

0.2.1.0 https://github.com/floriansemm/SolrBundle

Symfony2 Solr integration bundle

  Sources   Download

The Requires

 

search symfony index solr

01/11 2012

0.2

0.2.0.0 https://github.com/floriansemm/SolrBundle

Symfony2 Solr integration bundle

  Sources   Download

The Requires

 

search symfony index solr

25/10 2012

0.1

0.1.0.0 https://github.com/floriansemm/SolrBundle

Symfony2 Solr integration bundle

  Sources   Download

The Requires

 

search symfony index solr