Last modified: 2012-08-04 20:49:06 UTC

Wikimedia Bugzilla is closed!

Wikimedia has migrated from Bugzilla to Phabricator. Bug reports should be created and updated in Wikimedia Phabricator instead. Please create an account in Phabricator and add your Bugzilla email address to it.
Wikimedia Bugzilla is read-only. If you try to edit or create any bug report in Bugzilla you will be shown an intentional error message.
In order to access the Phabricator task corresponding to a Bugzilla report, just remove "static-" from its URL.
You could still run searches in Bugzilla or access your list of votes but bug reports will obviously not be up-to-date in Bugzilla.
Bug 9916 - On PostgreSQL 8.1, search does not work.
On PostgreSQL 8.1, search does not work.
Status: RESOLVED DUPLICATE of bug 9908
Product: MediaWiki
Classification: Unclassified
Search (Other open bugs)
1.10.x
PC Linux
: High critical (vote)
: ---
Assigned To: Nobody - You can work on this!
:
Depends on:
Blocks: postgres
  Show dependency treegraph
 
Reported: 2007-05-15 07:50 UTC by Stephen Martindale
Modified: 2012-08-04 20:49 UTC (History)
0 users

See Also:
Web browser: ---
Mobile Platform: ---
Assignee Huggle Beta Tester: ---


Attachments

Description Stephen Martindale 2007-05-15 07:50:42 UTC
I recently upgraded my wiki (PostgreSQL back-end) to version 1.10.0 using the
official upgrade method - i.e. running the update.php script with the PHP 5.2
CLI. The Wiki works but the search fails. This is a critical bug because a wiki
is useless without search!

I enabled $wgShowExceptionDetails and found more information on the error:
"ERROR: unrecognized normalization method: 5". A quick read of the query showed
that the script was trying to send "5" as the "normalization" parameter to
Tsearch2's "rank()" method. (Parm. 3)

Some research into TSearch2 shows that only three options are available for this
parameter:
    * 0 (the default) ignores document length.
    * 1 divides the rank by the logarithm of the length.
    * 2 divides the rank by the length itself. 
(Confirming my suspicions, I've used TSearch2 before...)
(Cut and Paste from http://www.rhodesmill.org/brandon/projects/tsearch2-ref.html)

Thinking that OpenFTS might have introduced more normalization options, I
checked the OpenFTS documentation. This did not reveal a solution - OpenFTS'
docs agree with the Tsearch2 docs.

Grep'ping around inside MediaWiki reveals the offending line to be line 144 of
includes/SearchPostgres.php which is hard-coded to send a value of 5 here.

I immediately suspected a bug introduced by the upgrade process (as I said, I
had upgraded (from 1.8, I think)) and checked the original archive of files I
downloaded from SourceForge - the file is identical. This bug was not caused by
a failure to update this individual file. While checking the original archive, I
did notice the existance of an includes/SearchTsearch2.php file. I was not sure
what that file was there for, so I examined it.

Within includes/SearchTsearch2.php, the rank() method is called with only 2
parameters. Hmm... interesting...

I tried two solutions.

First, I changed this "5" (line 144) to "2" (a non-default value I chose
willy-nilly from the three available choices) and saved
includes/SearchPostgres.php. The search succeeded. This solution poses three
questions:
    a) Why is there a 5 in the released code? Is it a genuine bug or am I
missing something?
    b) What *should* this value be, assuming it should not be 5?
    c) Could the fix be this simple? (That was *way* too easy.)

Secondly, I tried to find where "SearchPostgres" was being specified as the
search engine (hook) to use, intending to change it to SearchTsearch2 and see
what happens. I found the only reference to "SearchPostgres.php" on line 156 of
includes/AutoLoader.php. Killing this line broke the search function entirely.
(class 'SearchPostgres' not found.) Duh. (Spontaneous, quirky wish: must create
aliases for grep, called "grp" and "gre") Replacing the line with:
    'SearchTsearch2' => 'includes/SearchTsearch2.php',
... also did not work, until I changed 'SearchPostgres' to 'SearchTsearch2' on
line 215 of includes/SearchEngine.php. Sadly, while this caused the search to
run, no results where returned for my search terms.

Clearly the only solution is to change the 5 to something else (0, 1 or 2) on
line 144 of includes/SearchPostgres.php.

Am I missing something?
Can someone confirm this bug and this proposed solution?
What *is* the correct value? 0, 1 or 2?

P.S. Please forgive the stream-of-consciousness debugging technique. It works.
Comment 1 Greg Sabino Mullane 2007-05-15 18:19:46 UTC

*** This bug has been marked as a duplicate of 9908 ***

Note You need to log in before you can comment on or make changes to this bug.


Navigation
Links