Lupy full text indexer r0.1.5.3
---------------------------

- What is Lupy?

Lupy is a port of the excellent Jakarta Lucene 1.2 into Python. 

- What can I do with Lupy?

Lupy is a full text indexer and search engine. It can be used to index text documents such as web pages, source code, email, etc.

- What is in this release?

Most of Lucene 1.2 is in Lupy 0.12a. Lupy supports text indexing producing files that are binary compatible with Lucene. Index creation, update and searching are supported.

This release supports TermQuery, PhraseQuery and BooleanQuery.

There is a very simple analysis module with only a CharTokenizer. NB: Lucene is unicode aware as is lupy. However the included CharTokenizer is ascii only and will not process unicode properly. 


- What is not in this release?

There is no locking or synchronization.

I have not ported the query parser or all of the analysis/doc parsing classes. Queries can be built using the basic building blocks.

Only the most basic analysis tools have made it into this release.  The included analyzer is SimpleAnalyzer using a CharTokenizer (lupy's CharTokenizer allows numbers as well as letters so the "words" 'spam', 'sp1m', '112233' will be indexed. There is no stop-lists, Porter stemming, StandardAnalyzer or German analyzer.

This release does not contain the following queries:
- QueryParser
- MultiTermQuery
- FuzzyQuery
- WildCardQuery
- PrefixQuery
- RangeQuery
- Sloppy phrase queries

DateField has not been ported.


- How do I get started?

Look in the examples directory.

Most of the Lucene documentation is relevant to lupy:
http://jakarta.apache.org/lucene
http://www.onjava.com/pub/a/onjava/2003/01/15/lucene.html
http://darksleep.com/lucene/


- Porting Overview

The code in this port is not very pythonic. Hopefully this can change over time. In particular I think that Python language and library features such as cStringIOs and generators are directly applicable.

One Java feature that is used throughout Lucene is typed method signatures e.g. get(Integer) and get(Term) in the same class. Python is not typed so in these cases I have defined two methods getInt(i) and getTerm(t). I chose not to use Python's instanceof method  to dispatch by type. Lucene is highly optimized and there is very little in the way of late binding/polymorphism going on.


- Performance
Java is faster.


- Acknowledgements

Many thanks to Doug Cutting and the Jakarta Lucene team for buidling and enhancing such a high quality piece of open source software.

Glyph Lekowitz for serving as my language guru for Python and Java.

I hope you find what you are searching for ;-)
amir@divmod.org

