[Mediawiki-l] RE: mediawiki 1.4 & 1.5rc4, substring search, how?

RA Sebastian Dosch sebastian.dosch at depre.de
Thu Sep 29 06:50:50 UTC 2005


Dear Mr. Klein,

 

did I understand you right that, in order to enable substring search in
MediaWiki, one does not have to change anything else than adding the
php-file and changing the local settings as you recommended in the last
posting?

 

I had to change two lines where you made references to „SearchMySQL“ to
„SearchMySQL4“. After that the Wiki worked, but the behaviour of the search
didn´t change. I still cannot use „*“ or other wild cards.

 

Do I have to change anything else to make your suggestion work?

 

Thanks very much in advance for your help.

 

Regards / mit freundlichen Gruessen

 

Sebastian Dosch

sebastian.dosch at depre.de

 

 

-------------------You wrote:-----------------------

 

> 

>Message: 8

>Date: Wed, 28 Sep 2005 12:32:16 +0200

>From: Klein.Thomas at eae.com

>Subject: RE: [Mediawiki-l] mediawiki 1.4 & 1.5rc4, substring search,

>     how?

>To: <mediawiki-l at Wikimedia.org>

>Message-ID:

>     <OF2A6BE39F.59E045B1-ONC125708A.003933F9-C125708A.0039E2F7 at eae.com>

>Content-Type: text/plain; charset=ISO-8859-1

> 

> 

>Now, here is the class for substring search without to change the source

>and MySQL4!

> 

>The class SearchMySQL4SubString is a copy of SearchMySQL4.

> 

>Make a new file in subdir 'includes' with this name 'SearchMySQL4SubString'

>and copy

>the next code into this file:

> 

><?php

>/**

> * Search engine hook for MySQL 4+

> * @package MediaWiki

> * @subpackage Search

> */

> 

>require_once( 'SearchMySQL.php' );

> 

>/**

> * @package MediaWiki

> * @subpackage Search

> */

>class SearchMySQL4SubString extends SearchMySQL {

>      var $strictMatching = true;

> 

>      /** @todo document */

>      function SearchMySQL4SubString( &$db ) {

>            $this->db =& $db;

>      }

> 

>      function legalSearchChars() {

>            return "A-Za-z_'0-9\\x80-\\xFF\\-*?+";

>      }

> 

>      /** @todo document */

>      function parseQuery( $filteredText, $fulltext ) {

>            global $wgContLang;

>            $lc = SearchEngine::legalSearchChars();

>            $searchon = '';

>            $this->searchTerms = array();

> 

>            wfDebug( "parseQuery filteredText is: '$filteredText'\n" );

>            wfDebug( "parseQuery fulltext is: '$fulltext'\n" );

> 

>            # FIXME: This doesn't handle parenthetical expressions.

>            if( preg_match_all( '/([-+<>~]?)(([' . $lc .

>']+)(\*?)|"[^"]*")/',

>                    $filteredText, $m, PREG_SET_ORDER ) ) {

>                  foreach( $m as $terms ) {

>                        if( $searchon !== '' ) $searchon .= ' ';

>                        $searchon .= $terms[1] .

>$wgContLang->stripForSearch( $terms[2] );

>                        if( !empty( $terms[3] ) ) {

>                              $regexp = preg_quote( $terms[3], '/' );

>                              if( $terms[4] ) $regexp .= "[0-9A-Za-z_]+";

>                        } else {

>                              $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

>'{$this->filteredText}'\n" );

>            }

> 

>            $searchon = $this->db->strencode( $searchon );

>            $field = $this->getIndexField( $fulltext );

>            return " MATCH($field) AGAINST('$searchon' IN BOOLEAN MODE) ";

>      }

>}

>?>

> 

>And add to lines into your 'LocalSettings.php':

> 

>require_once( 'SearchMySQL4SubString.php' );

> 

>$wgSearchType         = SearchMySQL4SubString;

> 

> 

>Now the search function have the same syntax of MySQL4.

> 

>Also, see http://dev.mysql.com/doc/mysql/en/fulltext-boolean.html for

>details

>about full text sql queries in MySQL.

> 

> 

>Mit freundlichen Gr|ssen / Kind regards

> 

>i.A. Thomas  Klein

>OPS Koordination / OPS coordination

> 

>EAE software GmbH

>Kornkamp 8

>22926 Ahrensburg/Germany

> 

>Tel :     +49 4102/480-513

>Fax:     +49 4102/480-561

>e-mail:  mailto:klein.thomas at eae.com

>http://www.eae.com/

 




More information about the MediaWiki-l mailing list