Which Perl wrapper should I use?
If you want to access Xapian from Perl, there are several wrappers available. Some of these are designed for specialist use, some are more general.
Search::Xapian XS bindings
http://search.cpan.org/dist/Search-Xapian/
These are a set of hand-coded XS bindings, originally written by Alex Bowley, and now maintained by the Xapian project. These wrap a lot of the C++ API, but wrapping new classes and methods requires XS code to be written for them, so they tend to lag a bit.
Aside from the SWIG-generated Perl bindings, all the modules use Search::Xapian under the covers.
SWIG-generated Perl bindings in xapian-bindings
These were originally developed by Kosei Moriyama during Google Summer of Code 2009, and made their debut in the 1.2.4 release. Since 1.4.16 they are the preferred general-purpose Perl bindings to Xapian and can provide a near drop-in replacement for the XS bindings.
Catalyst::Model::Xapian
http://search.cpan.org/dist/Catalyst-Model-Xapian/
This is helper module to allow Xapian to be easily used in the Catalyst web application framework.
SWISH::Prog::Xapian
http://search.cpan.org/dist/SWISH-Prog-Xapian/
SWISH::Prog::Xapian is a Xapian-based implementation of Swish3, using the SWISH::3 bindings for libswish3. It is built on top of Search::Xapian.
The module's documentation suggests some reasons why you might want to use it:
Using Search::Xapian via SWISH::Prog::Xapian offers a few advantages:
- Aggregators and Filters
- You get to use all of SWISH::Prog's Aggregators and SWISH::Filter support. So you can easily index all kinds of file formats (email, .txt, .html, .xml, .pdf, .doc, .xls, etc) without writing your own parser.
- SWISH3
- SWISH::3 offers fast and robust XML and HTML parsers with an extensible configuration system, build on top of libxml2.
- Simple now, complex later
- You can index your content with SWISH::Prog::Xapian, then build a more complex searching application directly with Search::Xapian.
- Compatibility with swish_xapian
- The swish_xapian tool that comes as part of libswish3 should generate compatible indexes. So you can create indexes with SWISH::Prog::Xapian::Indexer and search them with swish_xapian and vice versa.
Rose::DBx::Object::Indexed::Indexer::Xapian
http://search.cpan.org/dist/Rose-DBx-Object-Indexed/
This module allows Xapian to be used with the Rose web application construction kit.
