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.