Upon a request on the experiences on this issue, I am posting the most
important functions of the program. Every DB record maps directly to one
file. The function that I did not include is "getDataSource()" which
acquires a jdbc datasource to your database.

cheers,
Christoph

        private void run() throws Exception {
                DataSource ds = getDataSource();
                File toDir = new File("outputDir");
                toDir.mkdirs();
                assert toDir.exists();
                assert toDir.isDirectory();

                copyToFilesystem(ds, toDir);
        }

        public void copyToFilesystem(DataSource ds, File toDir)
                        throws SQLException, IOException {
                Connection conn = ds.getConnection();
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt
                                .executeQuery("select NAME_, VALUE_ from 
XXXX.XXXX");
                while (rs.next()) {
                        String name = rs.getString("NAME_");
                        log.info("filename: '" + name + "'");
                        InputStream inStream = rs.getBinaryStream("VALUE_");
                        File file = new File(toDir, name);
                        assert !file.exists();
                        boolean ok = file.createNewFile();
                        assert ok;
                        FileOutputStream outStream = new FileOutputStream(file);

                        copyLarge(inStream, outStream);
                        inStream.close();
                        outStream.close();
                }
                conn.rollback();
        }

        /**
         * Taken from commons IO
         * 
         * @see 
http://svn.apache.org/viewvc/commons/proper/io/trunk/src/java/org/
         *      apache/commons/io/IOUtils.java?revision=736890
         */
        public static long copyLarge(InputStream input, OutputStream output)
                        throws IOException {
                byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
                long count = 0;
                int n = 0;
                while (-1 != (n = input.read(buffer))) {
                        output.write(buffer, 0, n);
                        count += n;
                }
                return count;
        }




ChristophD wrote:
> 
> Ok, so let me clear it up.
> 
> Lucene offers different types of Directories
> (org.apache.lucene.store.Directory) into which it stores the index data.
> Most people probably use the FSDirectory implementation which writes the
> index data as files into the filesystem. However, we use the DbDirectory
> implementation which writes into a specified relational database.
> 
> Now, I was really surprised to see that Luke only offers to open an index
> that was written to the filesystem. I had expected to be able to supply a
> jdbc url.
> 
> The way Lucene writes the index into the DB is really a direct projection
> of the FS version. For every file it creates a record in the DB which has
> a name and a BLOB that contains the file's data.
> 
> So what I did was, I wrote a small program that reads the index from the
> DB and writes it back as files. These files I could open with Luke without
> problems.
> 
> so long,
> Christoph
> 
> 
> Erick Erickson wrote:
>> 
>> Well, you haven't really provided much in the way of details.For
>> instance,
>> what does it mean that your Lucene index is
>> stored in a database"? Did you store it as a BLOB? Your
>> problem statement is very hard to understand, please explain
>> in more detail. Pretend you don't know a thing about your
>> app (as in, you're just a random reader of this list) and imagine
>> you were trying to understand well enough to offer useful
>> responses...
>> 
>> Best
>> Erick
>> 
>> On Tue, May 19, 2009 at 6:12 AM, ChristophD <christoph.die...@kqv.de>
>> wrote:
>> 
>>>
>>> This isn't really addressing my problem. I already have a running search
>>> system and just want to analyze it.
>>>
>>> cheers,
>>> Christoph
>>>
>>>
>>>
>>> amin1977 wrote:
>>> >
>>> > Are you using an object relational mapping tool like Hibernate?  if
>>> you
>>> > are
>>> > you could use hibernate search to index your persistent entities and
>>> then
>>> > use luke to inspect the indexes.   There may other ways of doing it I
>>> > guess.  Just a thought.
>>> >
>>> >
>>> > Cheers
>>> > Amin
>>> >
>>> > On Tue, May 19, 2009 at 9:23 AM, ChristophD <christoph.die...@kqv.de>
>>> > wrote:
>>> >
>>> >>
>>> >> Hello,
>>> >>
>>> >> I would like to use Luke to connect to an existing Lucene Index which
>>> is
>>> >> stored in a Database.
>>> >> However, Luke seems only to be able to read file based indexes.
>>> >>
>>> >> What are my options to analyze the DB index?
>>> >>
>>> >> thx,
>>> >> Christoph
>>> >> --
>>> >> View this message in context:
>>> >>
>>> http://www.nabble.com/Using-Luke-on-a-Lucene-Index-in-a-Database-tp23611846p23611846.html
>>> >> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
>>> >>
>>> >>
>>> >> ---------------------------------------------------------------------
>>> >> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
>>> >> For additional commands, e-mail: java-user-h...@lucene.apache.org
>>> >>
>>> >>
>>> >
>>> >
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Using-Luke-on-a-Lucene-Index-in-a-Database-tp23611846p23613338.html
>>> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
>>> For additional commands, e-mail: java-user-h...@lucene.apache.org
>>>
>>>
>> 
>> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Using-Luke-on-a-Lucene-Index-in-a-Database-tp23611846p23942165.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org

Reply via email to