* (bug 10132, 10134) Restore back-compatibility Image::imageUrl() function
[lhc/web/wiklou.git] / includes / SearchTsearch2.php
index 4db9dfb..b504f03 100644 (file)
@@ -1,38 +1,39 @@
 <?php
 # Copyright (C) 2004 Brion Vibber <brion@pobox.com>, Domas Mituzas <domas.mituzas@gmail.com>
 # http://www.mediawiki.org/
-# 
+#
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or 
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License along
 # with this program; if not, write to the Free Software Foundation, Inc.,
-# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 # http://www.gnu.org/copyleft/gpl.html
 
 /**
  * Search engine hook for PostgreSQL / Tsearch2
- * @package MediaWiki
- * @subpackage Search
+ * @addtogroup Search
  */
 
-require_once( 'SearchEngine.php' );
-
+/**
+ * @todo document
+ * @addtogroup Search
+ */
 class SearchTsearch2 extends SearchEngine {
        var $strictMatching = false;
-       
+
        function SearchTsearch2( &$db ) {
                $this->db =& $db;
-               $this->db->setSchema('tsearch');
+               $this->mRanking = true;
        }
-       
+
        function getIndexField( $fulltext ) {
                return $fulltext ? 'si_text' : 'si_title';
        }
@@ -44,6 +45,7 @@ class SearchTsearch2 extends SearchEngine {
                $this->searchTerms = array();
 
                # FIXME: This doesn't handle parenthetical expressions.
+               $m = array();
                if( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
                          $filteredText, $m, PREG_SET_ORDER ) ) {
                        foreach( $m as $terms ) {
@@ -61,28 +63,39 @@ class SearchTsearch2 extends SearchEngine {
                                $this->searchTerms[] = $regexp;
                        }
                        wfDebug( "Would search with '$searchon'\n" );
-                       wfDebug( "Match with /\b" . implode( '\b|\b', $this->searchTerms ) . "\b/\n" );
+                       wfDebug( 'Match with /\b' . implode( '\b|\b', $this->searchTerms ) . "\b/\n" );
                } else {
                        wfDebug( "Can't understand search query '{$this->filteredText}'\n" );
                }
-               
+
                $searchon = preg_replace('/(\s+)/','&',$searchon);
                $searchon = $this->db->strencode( $searchon );
+               return $searchon;
+       }
+
+       function queryRanking($filteredTerm, $fulltext) {
                $field = $this->getIndexField( $fulltext );
-               return " $field @@ to_tsquery('$searchon')";
+               $searchon = $this->parseQuery($filteredTerm,$fulltext);
+               if ($this->mRanking)
+                       return " ORDER BY rank($field,to_tsquery('$searchon')) DESC";
+               else
+                       return "";
        }
 
+
        function queryMain( $filteredTerm, $fulltext ) {
                $match = $this->parseQuery( $filteredTerm, $fulltext );
+               $field = $this->getIndexField( $fulltext );
                $cur = $this->db->tableName( 'cur' );
                $searchindex = $this->db->tableName( 'searchindex' );
                return 'SELECT cur_id, cur_namespace, cur_title, cur_text ' .
                        "FROM $cur,$searchindex " .
-                       'WHERE cur_id=si_page AND ' . $match;
+                       'WHERE cur_id=si_page AND ' .
+                       " $field @@ to_tsquery ('$match') " ;
        }
 
-        function update( $id, $title, $text ) {
-                $dbw=& wfGetDB(DB_MASTER);
+       function update( $id, $title, $text ) {
+               $dbw = wfGetDB(DB_MASTER);
                $searchindex = $dbw->tableName( 'searchindex' );
                $sql = "DELETE FROM $searchindex WHERE si_page={$id}";
                $dbw->query($sql,"SearchTsearch2:update");
@@ -92,17 +105,17 @@ class SearchTsearch2 extends SearchEngine {
                                "'),to_tsvector('".
                                $dbw->strencode( $text)."')) ";
                $dbw->query($sql,"SearchTsearch2:update");
-        }
+       }
 
-        function updateTitle($id,$title) {
-                $dbw=& wfGetDB(DB_MASTER);
-                $searchindex = $dbw->tableName( 'searchindex' );
-                $sql = "UPDATE $searchindex SET si_title=to_tsvector('" .
-                          $db->strencode( $title ) .
-                          "') WHERE si_page={$id}";
+       function updateTitle($id,$title) {
+               $dbw = wfGetDB(DB_MASTER);
+               $searchindex = $dbw->tableName( 'searchindex' );
+               $sql = "UPDATE $searchindex SET si_title=to_tsvector('" .
+                               $dbw->strencode( $title ) .
+                               "') WHERE si_page={$id}";
 
-                $dbw->query( $sql, "SearchMySQL4::updateTitle" );
-        }
+               $dbw->query( $sql, "SearchMySQL4::updateTitle" );
+       }
 
 }