Changeset 1304


Ignore:
Timestamp:
Aug 29, 2010, 11:54:01 PM (10 years ago)
Author:
teymour
Message:

On peut sauver un objet solarisé sans solr
L'ajout des objects dans solr se fait via un fichier de commandes

Location:
cpc/trunk/project
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • cpc/trunk/project/lib/model/solr/SolrListener.php

    r1183 r1304  
    11<?php
     2
    23
    34class SolrConnector extends sfLogger
     
    67  private $_options = NULL;
    78
     9  public static function getFileCommands() {
     10    return sfConfig::get('sf_log_dir').'/solr/commands.log';
     11  }
     12
    813  protected function doLog($message, $priority)
    914  {
     
    2833  }
    2934 
     35
     36  public function updateFromCommands() {
     37    if (!file_exists(self::getFileCommands().'.lock') && file_exists(self::getFileCommands()))
     38      rename(self::getFileCommands(), self::getFileCommands().'.lock');
     39    if (!file_exists(self::getFileCommands().'.lock'))
     40      return ;
     41    foreach(file(self::getFileCommands().'.lock') as $line) {
     42      if (preg_match('/(UPDATE|REMOVE): ([^\/]+)\/(\d+)/', $line, $matches)) {
     43        if ($matches[1] == 'UPDATE') {
     44          $obj = Doctrine::getTable($matches[2])->find($matches[3]);
     45          if ($obj)
     46            $this->updateLuceneRecord($obj);
     47          else
     48            echo $matches[2].'/'.$matches[3]." not found\n";
     49        }else{
     50          $this->solr->deleteById($matches[2].'/'.$matches[3]);
     51        }
     52      }
     53    }
     54    unlink(self::getFileCommands().'.lock');
     55  }
     56
    3057  private function get_and_strip($obj, $field) {
    3158    $f = $obj->get($field);
     
    92119      $document->addField('title', $this->getObjFieldsValue($obj, $t), 1.2 * $extra_weight);
    93120    }
     121
    94122    // La description
    95123      if (isset($content)) {
     
    153181     */
    154182    protected $_options = array();
     183
     184    protected static $fileCommand = null;
     185    protected static $fileDispatcher = null;
     186
     187    protected static function getFileCommand() {
     188      if (!self::$fileDispatcher) {
     189        self::$fileDispatcher = new sfEventDispatcher();
     190      }
     191      if (!self::$fileCommand) {
     192        self::$fileCommand = new sfFileLogger(self::$fileDispatcher, array('file' => SolrConnector::getFileCommands()));
     193      }
     194      return self::$fileCommand;
     195    }
     196
     197    private $command = null;
     198
    155199    /**
    156200     * __construct
     
    162206    {
    163207      $this->_options = $options;
     208      $this->command = self::getFileCommand();
    164209    }
    165210
     
    170215      return $this->solr;
    171216    }
     217
     218    private function sendCommand($status, $obj) {
     219      $this->command->log($status.': '.get_class($obj).'/'.$obj->id);
     220    }
    172221   
    173222    // Réindexation après une création / modification
     
    175224    {
    176225      $obj = $event->getInvoker();
    177       $this->getSolrConnector()->updateLuceneRecord($obj);
     226      //      $this->getSolrConnector()->updateLuceneRecord($obj);
     227      $this->sendCommand('UPDATE', $obj);
    178228    }
    179229   
     
    181231    public function postDelete(Doctrine_Event $event)
    182232    {
    183       $this->getSolrConnector()->deleteLuceneRecord($event->getInvoker());
     233      $obj = $event->getInvoker();
     234      //      $this->getSolrConnector()->deleteLuceneRecord($obj);
     235      $this->sendCommand('DELETE', $obj);
    184236    }
    185237   
  • cpc/trunk/project/test/unit/solrableTest.php

    r1157 r1304  
    2323$i->addTag('loi:1987');
    2424$i->save();
    25 
     25$s->updateFromCommands();
    2626$id = "Intervention/".$i->id;
    2727$a = $s->search("id:$id");
     28print_r($a);
    2829$t->is(count($a['response']['docs']), 1, "L'intervention a été ajoutée");
    2930$a = $s->search("bonjour id:$id");
     31print_r($a);
    3032$t->is($a['response']['docs'][0]['id'], $id, "L'intervention est trouvable");
    3133$a = $s->search("salut id:$id");
     
    3335$i->intervention = $inter." salut";
    3436$i->save();
     37$s->updateFromCommands();
    3538$a = $s->search("salut id:$id");
    3639$t->is($a['response']['docs'][0]['id'], $id, "L'intervention retournée sur des mots reindexés");
     
    3942$p->nom = "Benjamin Ooghe";
    4043$p->save();
     44$s->updateFromCommands();
    4145$id = "Parlementaire/".$p->id;
    4246$a = $s->search("id:$id");
     
    5357$q->ministere = "Ministere de la crise et du déficit";
    5458$q->save();
     59$s->updateFromCommands();
    5560$id = "QuestionEcrite/".$q->id;
    5661$a = $s->search("id:$id");
     
    6267$a = Doctrine::getTable('Amendement')->find(2);
    6368$a->save();
     69$s->updateFromCommands();
     70
    6471$id = "Amendement/".$a->id;
    6572$r = $s->search("id:$id");
Note: See TracChangeset for help on using the changeset viewer.