Uploaded image for project: 'Lucene - Core'
  1. Lucene - Core
  2. LUCENE-487

Database as a lucene index target

Details

    • New Feature
    • Status: Closed
    • Minor
    • Resolution: Not A Problem
    • 1.9
    • None
    • core/store
    • None
    • MySql (version 4.1 an up), Oracle (version 8.1.7 and up)

    Description

      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.

      Amir

      Attachments

        1. files.zip
          6 kB
          Amir Kibbar

        Activity

          People

            Unassigned Unassigned
            amirkibbar Amir Kibbar
            Votes:
            1 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: