source: cpc/trunk/project/lib/model/solr/SolrConnector.class.php @ 1316

Last change on this file since 1316 was 1316, checked in by teymour, 11 years ago

Un vrai fichier de commands (protégé)

File size: 2.4 KB
Line 
1<?php
2
3class SolrConnector extends sfLogger
4{
5  private $solr = NULL;
6  private $_options = NULL;
7
8  protected function doLog($message, $priority)
9  {
10    error_log(sprintf('%s (%s)', $message, sfLogger::getPriorityName($priority)));
11  }
12
13  public function __construct( $listener_options = NULL)
14  {
15    $host = sfConfig::get('app_solr_host', 'localhost');
16    $port = sfConfig::get('app_solr_port', '8983');
17    $url = sfConfig::get('app_solr_url', '/solr');
18    $this->solr = new Apache_Solr_Service($host, $port, $url);
19   
20    if(!$this->solr->ping()) {
21      throw new Exception('Search is not available right now.');
22    }
23   
24    $this->_options = $listener_options;
25
26    return $this->solr;
27  }
28 
29
30  public function updateFromCommands() {
31    $file = SolrCommands::getCommandContent();
32    foreach(file($file) as $line) {
33      if (preg_match('/(UPDATE|DELETE) : (.+)/', $line, $matches)) {
34        $obj = json_decode($matches[2]);
35        if ($matches[1] == 'UPDATE') {
36          $this->updateLuceneRecord($obj);
37        }else{
38          $this->deleteLuceneRecord($obj->id);
39        }
40      }
41    }
42    SolrCommands::releaseCommandContent();
43  }
44
45
46  public function deleteLuceneRecord($solr_id)
47  {
48    if($this->solr->deleteById($solr_id) ) {
49      return $this->solr->commit();
50    }
51    return false;
52  }
53
54  public function updateLuceneRecord($obj)
55  {
56     $document = new Apache_Solr_Document(); 
57     $document->addField('id', $obj->id); 
58     $document->addField('object_id', $obj->object_id); 
59     $document->addField('object_name', $obj->object_name); 
60     if (isset($obj->wordcount))
61       $document->addField('wordcount', $obj->wordcount); 
62     if (isset($obj->title))
63       $document->addField('title', $obj->title->content, $obj->title->weight); 
64     if (isset($obj->description))
65       $document->addField('description', $obj->description->content, $obj->description->weight); 
66     if (isset($obj->date))
67       $document->addField('date', $obj->date->content, $obj->date->weight); 
68     $this->solr->addDocument($document);
69     $this->solr->commit();
70  }
71
72  public function deleteAll() {
73    $this->solr->deleteByQuery('*:*');
74    $this->solr->commit();
75  }
76
77  public function search($queryString, $params = array(), $offset = 0, $maxHits = 0) {
78    if($maxHits == 0)
79        $maxHits = sfConfig::get('app_solr_max_hits', 256);
80    $response = $this->solr->search($queryString, $offset, $maxHits, $params);
81    return unserialize($response->getRawResponse());
82  }
83 
84}
85
Note: See TracBrowser for help on using the repository browser.