| Wiki-Toolkit documentation | Contained in the Wiki-Toolkit distribution. |
Wiki::Toolkit::Setup::DBIxFTSMySQL - set up fulltext indexes for Wiki::Toolkit
use Wiki::Toolkit::Setup::DBIxFTSMySQL; Wiki::Toolkit::Setup::DBIxFTSMySQL::setup($dbname, $dbuser, $dbpass, $dbhost);
Omit $dbhost if the database is local.
Set up DBIx::FullTextSearch indexes for use with Wiki::Toolkit. Has only
one function, setup, which takes as arguments either the
database name, the username and the password or a database handle
. The username must be able to create and drop tables in the database.
The $dbhost argument is optional -- omit it if the database is local.
Note that any pre-existing Wiki::Toolkit indexes stored in the database
will be cleared by this function, so if you have existing data you
probably want to use the store parameter to get it re-indexed.
Kake Pugh (kake@earth.li).
Copyright (C) 2002-2004 Kake Pugh. All Rights Reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Wiki-Toolkit documentation | Contained in the Wiki-Toolkit distribution. |
package Wiki::Toolkit::Setup::DBIxFTSMySQL; use strict; use vars qw( $VERSION ); $VERSION = 0.04; use DBI; use DBIx::FullTextSearch; use Carp;
sub setup { my $dbh = _get_dbh( @_ ); # Drop FTS indexes if they already exist. my $fts = DBIx::FullTextSearch->open($dbh, "_content_and_title_fts"); $fts->drop if $fts; $fts = DBIx::FullTextSearch->open($dbh, "_title_fts"); $fts->drop if $fts; # Set up FullText indexes and index anything already extant. my $fts_all = DBIx::FullTextSearch->create($dbh, "_content_and_title_fts", frontend => "table", backend => "phrase", table_name => "node", column_name => ["name","text"], column_id_name => "name", stemmer => "en-uk"); my $fts_title = DBIx::FullTextSearch->create($dbh, "_title_fts", frontend => "table", backend => "phrase", table_name => "node", column_name => "name", column_id_name => "name", stemmer => "en-uk"); my $sql = "SELECT name FROM node"; my $sth = $dbh->prepare($sql); $sth->execute(); while (my ($name, $version) = $sth->fetchrow_array) { $fts_title->index_document($name); $fts_all->index_document($name); } $sth->finish; } sub _get_dbh { return $_[0] if ( ref $_[0] and ref $_[0] eq 'DBI::db' ); my ($dbname, $dbuser, $dbpass, $dbhost) = @_; my $dsn = "dbi:mysql:$dbname"; $dsn .= ";host=$dbhost" if $dbhost; my $dbh = DBI->connect($dsn, $dbuser, $dbpass, { PrintError => 1, RaiseError => 1, AutoCommit => 1 } ) or croak DBI::errstr; return $dbh; }
1;