*/
class SearchOracle extends SearchEngine {
- var $strictMatching = false;
-
function __construct($db) {
$this->db = $db;
}
* @private
*/
function queryRanking($filteredTerm, $fulltext) {
- return '';
+ return ' ORDER BY score(1)';
}
/**
}
/** @todo document */
- function parseQuery( $filteredText, $fulltext ) {
+ function parseQuery($filteredText, $fulltext) {
global $wgContLang;
$lc = SearchEngine::legalSearchChars();
- $searchon = '';
$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 ) {
- if( $searchon !== '' ) $searchon .= ' ';
- if( $this->strictMatching && ($terms[1] == '') ) {
- $terms[1] = '+';
- }
- $searchon .= $terms[1] . $wgContLang->stripForSearch( $terms[2] );
- if( !empty( $terms[3] ) ) {
+ $q = array();
+
+ if (preg_match_all('/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
+ $filteredText, $m, PREG_SET_ORDER)) {
+ foreach($m as $terms) {
+ $q[] = $terms[1] . $wgContLang->stripForSearch($terms[2]);
+
+ if (!empty($terms[3])) {
$regexp = preg_quote( $terms[3], '/' );
- if( $terms[4] ) $regexp .= "[0-9A-Za-z_]+";
+ if ($terms[4])
+ $regexp .= "[0-9A-Za-z_]+";
} else {
- $regexp = preg_quote( str_replace( '"', '', $terms[2] ), '/' );
+ $regexp = preg_quote(str_replace('"', '', $terms[2]), '/');
}
$this->searchTerms[] = $regexp;
}
- wfDebug( "Would search with '$searchon'\n" );
- wfDebug( 'Match with /\b' . implode( '\b|\b', $this->searchTerms ) . "\b/\n" );
- } else {
- wfDebug( "Can't understand search query '{$filteredText}'\n" );
}
- $searchon = $this->db->strencode($searchon);
- $field = $this->getIndexField( $fulltext );
+ $searchon = $this->db->strencode(join(',', $q));
+ $field = $this->getIndexField($fulltext);
return " CONTAINS($field, '$searchon', 1) > 0 ";
}