Alex Trofimov 12 лет назад
Родитель
Сommit
8e7abe1b4e

+ 29 - 24
inc/classes/BxDolSearch.php

@@ -675,9 +675,13 @@ class BxDolSearchResult implements iBxDolReplaceable
                 $aSql['order'] = "ORDER BY RAND()";
                 break;
            case 'score':
-                if (is_array($this->aCurrent['restriction']['keyword'])) {
-                  $aSql['order'] = "ORDER BY `score` DESC";
-                  $aSql['ownFields'] .= $this->getSearchFieldsCond($this->aCurrent['searchFields'], $this->aCurrent['restriction']['keyword']['value'], 'score'). ', ';
+                if (is_array($this->aCurrent['restriction']['keyword'])) {    
+                    $sPseud = '';
+                    if ('on' == getParam('useLikeOperator')) {
+                        $aSql['order'] = "ORDER BY `score` DESC";
+                        $sPseud = 'score';
+                    }
+                    $aSql['ownFields'] .= $this->getSearchFieldsCond($this->aCurrent['searchFields'], $this->aCurrent['restriction']['keyword']['value'], $sPseud) . ',';
                 }
                 break;
            case 'none':
@@ -726,7 +730,7 @@ class BxDolSearchResult implements iBxDolReplaceable
     function getSearchFieldsCond ($aFields, $sKeyword, $sPseud = '') 
     {
         if (!$sKeyword)
-            return;
+            return '';
 
         $sTable = empty($this->aCurrent['tableSearch']) ? $this->aCurrent['table'] : $this->aCurrent['tableSearch'];
 
@@ -736,32 +740,33 @@ class BxDolSearchResult implements iBxDolReplaceable
 
         $sKeyword = $oDb->escape($sKeyword);
 
-        $aSql = array(
-            'function' => 'MATCH',
-            'operator' => 'AGAINST',
-            'word' => $sKeyword
-        );
+        if (!is_array($aFields))
+            $aFields = array($aFields);
+
         if ($bLike == 'on') {
-            $aSql = array(
-                'function' => 'CONCAT', // TODO: get rid of CONCAT !!!
-                'operator' => 'LIKE',
-                  'word' => '%' . preg_replace('/\s+/', '%', $sKeyword) . '%'
-            );
-        }
 
-        $sqlWhere = " {$aSql['function']}(";
-        if (is_array($aFields)) {
+            $sKeyword = '%' . preg_replace('/\s+/', '%', $sKeyword) . '%';
+
+            $sSqlWhere = '';
             foreach ($aFields as $sValue)
-                $sqlWhere .= "`{$sTable}`.`$sValue`, ";
+                $sSqlWhere .= "`{$sTable}`.`$sValue` LIKE  '$sKeyword' OR ";
+
+            $sSqlWhere = '(' . trim($sSqlWhere, 'OR ') . ')';
+
         } else {
-                $sqlWhere .= "`{$sTable}`.`$aFields`";
-        }
-        $sqlWhere = trim($sqlWhere, ', ') . ") {$aSql['operator']} ('{$aSql['word']}')";
 
-        if (strlen($sPseud) > 0)
-            $sqlWhere .= " as `$sPseud`";
+            $sSqlWhere = '';
+            foreach ($aFields as $sValue)
+                $sSqlWhere .= "`{$sTable}`.`$sValue`, ";
+            
+            $sSqlWhere = trim($sSqlWhere, ', ');
+            $sSqlWhere = " MATCH({$sSqlWhere}) AGAINST ('{$sKeyword}') ";
 
-        return $sqlWhere;
+            if (!empty($sPseud))
+                $sSqlWhere .= " AS `$sPseud` ";
+        }
+
+        return $sSqlWhere;
     }
 
     /**

+ 2 - 1
modules/boonex/notes/install/sql/install.sql

@@ -14,7 +14,8 @@ CREATE TABLE IF NOT EXISTS `bx_notes_posts` (
   `votes` int(11) NOT NULL default '0',
   `comments` int(11) NOT NULL default '0',
   `allow_view_to` int(11) NOT NULL DEFAULT '3',
-  PRIMARY KEY (`id`)
+  PRIMARY KEY (`id`),
+  FULLTEXT KEY `title_text` (`title`,`text`)
 );
 
 -- TABLE: storages & transcoders

+ 2 - 1
modules/boonex/organizations/install/sql/install.sql

@@ -10,7 +10,8 @@ CREATE TABLE IF NOT EXISTS `bx_organizations_data` (
   `org_name` varchar(255) NOT NULL,
   `org_cat` int(11) NOT NULL,
   `views` int(11) NOT NULL default '0',
-  PRIMARY KEY (`id`)
+  PRIMARY KEY (`id`),
+  FULLTEXT KEY `org_name` (`org_name`)
 );
 
 -- TABLE: STORAGES & TRANSCODERS

+ 2 - 1
modules/boonex/persons/install/sql/install.sql

@@ -10,7 +10,8 @@ CREATE TABLE IF NOT EXISTS `bx_persons_data` (
   `fullname` varchar(255) NOT NULL,
   `sex` int(11) NOT NULL,
   `views` int(11) NOT NULL default '0',
-  PRIMARY KEY (`id`)
+  PRIMARY KEY (`id`),
+  FULLTEXT KEY `fullname` (`fullname`)
 );
 
 -- TABLE: STORAGES & TRANSCODERS