Type: New Feature
Resolution: Not A Problem
Affects Version/s: 1.9
Fix Version/s: None
MySql (version 4.1 an up), Oracle (version 8.1.7 and up)
I've written an extension for the Directory object called DBDirectory, that allows you to read and write a Lucene index to a database instead of a file system.
This is done using blobs. Each blob represents a "file". Also, each blob has a name which is equivalent to the filename and a prefix, which is equivalent to a directory on a file system. This allows you to create multiple Lucene indexes in a single database schema.
The solution uses two tables:
LUCENE_INDEX - which holds the index files as blobs
LUCENE_LOCK - holds the different locks
Attached is my proposed solution. This solution is still very basic, but it does the job.
The solution supports Oracle and mysql
To use this solution:
1. Place the files:
- DBDirectory in src/java/org/apache/lucene/store
- TestDBIndex in src/test/org/apache/lucene/index
- objects-mysql.sql in src/db
- objects-oracle.sql in src/db
2. Edit the parameters for the database connection in TestDBIndex
3. Create the database tables using the objects-mysql.sql script (assuming you're using mysql)
4. Build Lucene
5. Run TestDBIndex with the database driver in the classpath
I've tested the solution on mysql, but it should work on Oracle, I will test that in a few days.