NAME

Dezi::Aggregator::DBI - index DB records

SYNOPSIS

    use Dezi::Aggregator::DBI;
    use Carp;

    my $aggregator = Dezi::Aggregator::DBI->new(
        db => [
            "DBI:mysql:database=movies;host=localhost;port=3306",
            'some_user', 'some_secret_pass',
            {
                RaiseError  => 1,
                HandleError => sub { confess(shift) },
            }
        ],
        schema => {
          'moviesIlike' => {
               title       => {type => 'char', bias => 1},
               synopsis    => {type => 'char', bias => 1},
               year        => {type => 'int',  bias => 1},
               director    => {type => 'char', bias => 1},
               producer    => {type => 'char', bias => 1},
               awards      => {type => 'char', bias => 1},
               date        => {type => 'date', bias => 1},
               swishdescription => { synopsis => 1, producer => 1 },
               swishtitle       => 'title',
          }
        }
        use_quotes      => 1,
        quote_char      => '`', # backtick
        alias_columns   => 1,
        indexer         => Dezi::Indexer::Native->new,
    );

    $aggregator->crawl();

DESCRIPTION

Dezi::Aggregator::DBI is a Dezi::Aggregator subclass designed for providing full-text search for databases.

METHODS

Since Dezi::Aggregator::DBI inherits from Dezi::Aggregator, read that documentation first. Any overridden methods are documented here.

new( opts )

Create new aggregator object.

The following opts are required:

db => connect_info

connect_info is passed directly to DBI's connect() method, so see the DBI docs for syntax. If connect_info is a DBI handle object, it is accepted as is. If connect_info is an array ref, it will be dereferenced and passed to connect(). Otherwise it will be passed to connect as is.

schema => db_schema

db_schema is a hashref of table names and column descriptions. Each key should be a table name. Each value should be a hashref of column descriptions, where the key is the column name and the value is a hashref of type and bias. See the SYNOPSIS.

There are two special column names: swishtitle and swishdescription. These are reserved for mapping real column names to PropertyNames for returning in search results. swishtitle should be the name of a column, and swishdescription should be a hashref of column names to include in the StoreDescription value.

indexer => indexer_obj

A Dezi::Indexer-derived object.

The following opts are optional:

alias_columns => 0|1

The alias_columns flag indicates whether all columns should be searchable under the default MetaName of swishdefault. The default is 1 (true). This is not the default behaviour of swish-e; this is a feature of Dezi.

use_quotes

Boolean indicating whether column and table names should be quoted. This is typically DBD-specific (e.g., MySQL requires this be true). Default is true.

quote_char

The character to use when use_quotes is true. Default is ` (backtick).

NOTE: The new() method simply inherits from Dezi::Aggregator, so any params valid for that method are allowed here.

BUILD

Internal method called by new().

crawl

Create index.

Returns number of rows indexed.

AUTHOR

Peter Karman, <karpet@dezi.org>

BUGS

Please report any bugs or feature requests to bug-dezi-app at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Dezi-App. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Dezi::App

You can also look for information at:

COPYRIGHT AND LICENSE

Copyright 2018 by Peter Karman

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

http://dezi.org/, http://swish-e.org/, http://lucy.apache.org/