Changeset 82648 in spip-zone


Ignore:
Timestamp:
May 21, 2014, 7:51:17 AM (5 years ago)
Author:
fil@…
Message:

comme il ne peut exister qu'une seule clause MATCH(), on la traite comme une chose unique, ce qui facilite la modification a la volee de la query avec ->match('autre chose')

Location:
_plugins_/indexer/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/indexer/trunk/iterateur/sphinx2.php

    r82646 r82648  
    132132                $this->setIndex($this->command['index']);
    133133                $this->setSelection($this->command['selection']);
    134                 $this->setRecherche($this->command['recherche']);
     134                $this->setMatch($this->command['recherche']);
    135135                $this->setOrderBy($this->command['orderby']);
    136136                $this->setGroupBy($this->command['group']); // groupby interfère avec spip :/
     
    238238         * @return bool True si au moins un index est ajouté, false sinon
    239239        **/
    240         public function setRecherche($recherche) {
    241                 if (!is_array($recherche)) $recherche = array($recherche);
    242                 $recherche = array_filter($recherche);
    243                 if (!$recherche) {
     240        public function setMatch($match) {
     241                if (!is_array($match)) $match = array($match);
     242                $match = array_filter($match);
     243                if (!$match) {
    244244                        return false;
    245245                }
    246                 $match = implode(' ',$recherche);
     246                $match = implode(' ',$match);
    247247                $this->queryApi
    248248                        ->select('WEIGHT() AS score')
    249                         ->where('MATCH(' . $this->quote( $recherche ) . ')');
     249                        ->match( $match );
    250250                return true;
    251251        }
  • _plugins_/indexer/trunk/lib/Sphinx/SphinxQL/Query.php

    r82616 r82648  
    99        private $select  = array();
    1010        private $from    = array();
     11        private $match   = null;
    1112        private $where   = array();
    1213        private $groupby = array();
     
    3031        public function where($where) {
    3132                $this->where[] = $where;
     33                return $this;
     34        }
     35
     36        public function match($match) {
     37                $this->match = $match;
    3238                return $this;
    3339        }
     
    6571                $query = array();
    6672                $this->removeEmpty();
    67                 if ($this->select)   $query[] = 'SELECT '   . implode(', ', $this->select);
     73                if ($this->select)   $query[] = 'SELECT '   . implode(', ', array_unique($this->select));
    6874                if ($this->from)     $query[] = 'FROM '     . implode(', ', $this->from);
    69                 if ($this->where)    $query[] = 'WHERE ('   . implode(') AND (', $this->where) . ')';
     75
     76                // WHERE et MATCH
     77                $where = $this->where;
     78                if ($this->match) $where[] = 'MATCH('. $this->quote($this->match).')';
     79                if ($where)    $query[] = 'WHERE ('   . implode(') AND (', $where) . ')';
     80
    7081                if ($this->groupby)  $query[] = 'GROUP BY ' . implode(', ', $this->groupby);
    7182                if ($this->orderby)  $query[] = 'ORDER BY ' . implode(', ', $this->orderby);
Note: See TracChangeset for help on using the changeset viewer.