The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;

use ExtUtils::testlib;
use Getopt::Std;
use Search::Xapian qw(:ops);

use vars qw( %opts );
getopts('d:t:nh', \%opts);

if( exists $opts{h} ) {
  print <<EOF;
Synopsis: Searches a Xapian database for a particular term.
Usage: $0 -d testdb -t help
Options:
        -d : database directory
        -t : search terms
        -h : displays this help screen
        -q : quiet; does not display document data
EOF
  exit 0;
}

if( !$opts{d} or !$opts{t} ) {
  print "Usage: $0 -d [database dir] -t [search terms]\n";
  print "Try $0 -h for further information\n";
  exit 0;
}

my $db = Search::Xapian::Database->new( $opts{d} );
my @terms = split ',', $opts{t};
my $enq = $db->enquire( OP_OR, @terms );

printf "Parsing query '%s'\n", $enq->get_query()->get_description();

my @matches = $enq->matches(0, 10);

print scalar(@matches) . " results found\n";

foreach my $match ( @matches ) {
  printf "ID %d %d%%", $match->get_docid(), $match->get_percent();
  if( !defined( $opts{n} ) ) {
    my $doc = $match->get_document();
    printf " [ %s ]", $doc->get_data();
  }
  print "\n";
}