View on
MetaCPAN is shutting down
For details read Perl NOC. After June 25th this page will redirect to
David E. Wheeler > Lucy-0.2.2 > Lucy



Annotate this POD


Open  1
View/Report Bugs
Module Version: 0.002002   Source   Latest Release: Lucy-0.6.2


Lucy - Apache Lucy search engine library.




First, plan out your index structure, create the index, and add documents:

    use Lucy::Index::Indexer;
    use Lucy::Plan::Schema;
    use Lucy::Analysis::PolyAnalyzer;
    use Lucy::Plan::FullTextType;
    # Create a Schema which defines index fields.
    my $schema = Lucy::Plan::Schema->new;
    my $polyanalyzer = Lucy::Analysis::PolyAnalyzer->new( 
        language => 'en',
    my $type = Lucy::Plan::FullTextType->new(
        analyzer => $polyanalyzer,
    $schema->spec_field( name => 'title',   type => $type );
    $schema->spec_field( name => 'content', type => $type );
    # Create the index and add documents.
    my $indexer = Lucy::Index::Indexer->new(
        schema => $schema,   
        index  => '/path/to/index',
        create => 1,
    while ( my ( $title, $content ) = each %source_docs ) {
            title   => $title,
            content => $content,

Then, search the index:

    use Lucy::Search::IndexSearcher;
    my $searcher = Lucy::Search::IndexSearcher->new( 
        index => '/path/to/index' 
    my $hits = $searcher->hits( query => "foo bar" );
    while ( my $hit = $hits->next ) {
        print "$hit->{title}\n";


Apache Lucy is a high-performance, modular search engine library.


Getting Started

Lucy::Simple provides a stripped down API which may suffice for many tasks.

Lucy::Docs::Tutorial demonstrates how to build a basic CGI search application.

The tutorial spends most of its time on these five classes:

Delving Deeper

Lucy::Docs::Cookbook augments the tutorial with more advanced recipes.

For creating complex queries, see Lucy::Search::Query and its subclasses TermQuery, PhraseQuery, ANDQuery, ORQuery, NOTQuery, RequiredOptionalQuery, MatchAllQuery, and NoMatchQuery, plus Lucy::Search::QueryParser.

For distributed searching, see LucyX::Remote::SearchServer, LucyX::Remote::SearchClient, and Lucy::Search::PolySearcher.

Backwards Compatibility Policy

Lucy will spin off stable forks into new namespaces periodically. The first will be named "Lucy1". Users who require strong backwards compatibility should use a stable fork.

The main namespace, "Lucy", is an API-unstable development branch (as hinted at by its 0.x.x version number). Superficial interface changes happen frequently. Hard file format compatibility breaks which require reindexing are rare, as we generally try to provide continuity across multiple releases, but we reserve the right to make such changes.


The Lucy module itself does not have a large interface, providing only a single public class method.


    my $instream = $folder->open_in( file => 'foo' ) or die Lucy->error;

Access a shared variable which is set by some routines on failure. It will always be either a Lucy::Object::Err object or undef.


The Apache Lucy homepage, where you'll find links to our mailing lists and so on, is Please direct support questions to the Lucy users mailing list.


Not thread-safe.

Some exceptions leak memory.

If you find a bug, please inquire on the Lucy users mailing list about it, then report it on the Lucy issue tracker once it has been confirmed:


Apache Lucy is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.


Apache Lucy is distributed under the Apache License, Version 2.0, as described in the file LICENSE included with the distribution.

syntax highlighting: