Loading...
 
Skip to main content

History: MySQL4searchHack

Preview of version: 13 (current)

reason:

  • achieve the following search functionality:
    • quoted multiple-word strings return hits only when entire string is matched
    • boolean search syntax +wordA +wordB returns only objects which contain both words
    • boolean search syntax +wordA -wordB returns only hits which contain wordA but not wordB


changed file:

  • lib/searchlib.php


notes:

  • this hack is only intended for MySQL 4.0+
  • this does not involve the "Search-new" Tiki search engine


1) Add Boolean clause to SELECT statement:


$sqlft = 'MATCH(' . join(',', $h['search']). ') AGAINST (' . $qwords . ')';


$sqlft = 'MATCH(' . join(',', $h['search']). ') AGAINST (' . $qwords;

global $db_tiki;

if ($db_tiki='mysql') {
$sqlft .= ' IN BOOLEAN MODE)';
} else {
$sqlft .= ' )';
}

2) Remove Simple Search fallback:


if (!$cant) { // no result
if ($fulltext && $words) // try a simple search
return $this->_find($h, $words, $offset, $maxRecords, false);
else
return array(
'data' => array(),
'cant' => 0
);
}


note: the simple search block causes following error in MySQL 4.0.15 boolean search "+listening +page":
Warning: mysql error: Got error 'repetition-operator operand invalid' from regexp in query:

SELECT COUNT(*) FROM tiki_comments c, tiki_pages p WHERE c.objectType = "wiki page"
AND p.pageName=c.object AND (UPPER(c.title) REGEXP '.*+LISTENING.*'
OR UPPER(c.data) REGEXP '.*+LISTENING.*') AND (UPPER(c.title) REGEXP '.*+PAGE.*'
OR UPPER(c.data) REGEXP '.*+PAGE.*')

in c:\program files\easyphp1-7\www\tw\lib\tikidblib.php on line 125
Values:

$result is false
$result is empty



Unless I'm missing something, the Tiki.org search engine doesn't work as expected either. Quoted strings just act like simple ORs and boolean +/- prefixes cause lots of error messages. I had the same symptoms on my 1.8 implementation until I made these changes.''


I will attach modified source code snippet and Unix diff file.

History

Information Version
luci Mass search and replace 13
View
Stephen Lee 12
View
Kevin Behrens 11
View
Kevin Behrens 10
View
Kevin Behrens 9
View
Kevin Behrens 8
View
Kevin Behrens 7
View
Kevin Behrens 6
View
Kevin Behrens 5
View
Kevin Behrens 4
View
Kevin Behrens 3
View
Kevin Behrens 2
View