Mailing List Archive

Manually creating a RAMDirectory from pre-existing index files.
(Using version 1.2rc4 of canned Lucene)

I am working on a document navigation/browsing applet and want to
implement a client-side search that is completely independent of any
server mechanism, yet is still fast (i.e. not a "crawler"). It will be
LAN-based, so moving large files is not an issue.

Currently I create an index of the files to be searched in the
traditional Lucene manner and store them on a web server. From the
applet I open each of these pre-existing files and do a byte->byte copy
to a RAMDirectory (RD) in the client applet's memory. I am then able to
access the files from the RD in the applet, list their sizes (which
match up with the originals) and read back their contents (which also
match up with the origs, byte-for-byte). However, when I attempt to
create an IndexSearcher by passing my RAMDirectory, I get the following
Exception:

Error creating IndexSearcher!

java.lang.ArrayIndexOutOfBoundsException: 116 >= 7
at java.util.Vector.elementAt(Unknown Source)
at org.apache.lucene.index.FieldInfos.fieldInfo(Unknown Source)
at org.apache.lucene.index.FieldInfos.fieldName(Unknown Source)
at org.apache.lucene.index.SegmentTermEnum.readTerm(Unknown
Source)
at org.apache.lucene.index.SegmentTermEnum.next(Unknown Source)
at org.apache.lucene.index.TermInfosReader.readIndex(Unknown
Source)
at org.apache.lucene.index.TermInfosReader.<init>(Unknown
Source)
at org.apache.lucene.index.SegmentReader.<init>(Unknown Source)
at org.apache.lucene.index.SegmentReader.<init>(Unknown Source)
at org.apache.lucene.index.IndexReader$1.doBody(Unknown Source)
at org.apache.lucene.store.Lock$With.run(Unknown Source)
at org.apache.lucene.index.IndexReader.open(Unknown Source)
at org.apache.lucene.search.IndexSearcher.<init>(Unknown Source)
at Search.finishedLoad(Search.java:200)
at fileLoader.run(fileLoader.java:98)

I can successfully pass the physical index directory to an IndexReader
and everything is fine, so I know the index files are ok. Here is the
code I use to get and copy each file to the client applets memory:

public void addItem(String dataLine) // dataLine is the real
filename // of an
index component
{
// Get file
try
{
InputStreamReader fileIn;
org.apache.lucene.store.OutputStream outFile;

URL url;
URLConnection urlConn;
int EOF;

// Process file
url = new URL(
_applet.getCodeBase().toString()
+ "index/" + dataLine);
urlConn = url.openConnection();
urlConn.setDoInput(true);
urlConn.setUseCaches(false);

fileIn = new
InputStreamReader(urlConn.getInputStream());

System.out.println("File: " + dataLine +
", Length: "
+ urlConn.getContentLength());

// indices is a pre-defined RAMDirectory
outFile = indices.createFile(dataLine);

EOF = fileIn.read();

while (EOF != -1)
{
outFile.writeByte((byte)EOF);
EOF = fileIn.read();
}

outFile.close();
}
catch (MalformedURLException mue)
{
System.out.println("!!Error Bad data file link "
+
_applet.getCodeBase().toString() + "/" +
dataLine);
}
catch (IOException ioe)
{
System.out.println("!!Error Reading " +
_applet.getCodeBase().toString() + "/" +
dataLine);
}
}

And here is the code I use to create the IndexSearcher:

indices.close();

try
{
searcher = new IndexSearcher(indices);
}
catch (Exception ioe)
{
System.out.println("Error creating
IndexSearcher!");
ioe.printStackTrace();
}

This is when the exception gets thrown...

Any ideas on why this wouldn't be working?

Thanks,
Josh


--
To unsubscribe, e-mail: <mailto:lucene-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:lucene-dev-help@jakarta.apache.org>