You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by ca...@apache.org on 2011/05/24 15:43:13 UTC
svn commit: r1127048 - in /incubator/jena/Jena2/LARQ/trunk/src:
main/java/org/apache/jena/larq/ main/java/org/apache/jena/larq/assembler/
test/java/org/apache/jena/larq/
Author: castagna
Date: Tue May 24 13:43:13 2011
New Revision: 1127048
URL: http://svn.apache.org/viewvc?rev=1127048&view=rev
Log:
IndexLARQ as a new constructor which takes an IndexWriter (so that when we have a read/write Lucene index we can close it properly). Also, every time we do a search we check the reader.isCurrent(), if not a new IndexSearcher is instantiated so that index changes are visible to users searching.
Modified:
incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/IndexLARQ.java
incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/assembler/AssemblerLARQ.java
incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TS_LARQ.java
incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TestAssemblerLARQ.java
Modified: incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/IndexLARQ.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/IndexLARQ.java?rev=1127048&r1=1127047&r2=1127048&view=diff
==============================================================================
--- incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/IndexLARQ.java (original)
+++ incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/IndexLARQ.java Tue May 24 13:43:13 2011
@@ -19,12 +19,14 @@
package org.apache.jena.larq;
+import java.io.IOException;
import java.util.Arrays;
import java.util.Iterator;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.IndexSearcher;
@@ -47,11 +49,13 @@ import com.hp.hpl.jena.util.iterator.Map
public class IndexLARQ
{
- protected final IndexSearcher searcher ;
- protected final IndexReader reader ;
+ protected IndexSearcher searcher ;
+ protected IndexReader reader ;
+ protected final IndexWriter writer ;
protected final QueryParser luceneQueryParser ;
protected final Analyzer analyzer ;
+
public IndexLARQ(IndexReader r)
{
this(r, new StandardAnalyzer(LARQ.LUCENE_VERSION)) ;
@@ -60,6 +64,7 @@ public class IndexLARQ
public IndexLARQ(IndexReader r, Analyzer a)
{
//this(r, new QueryParser(LARQ.fIndex, a)) ;
+ writer = null ;
reader = r ;
searcher = new IndexSearcher(reader) ;
analyzer = a ;
@@ -67,10 +72,28 @@ public class IndexLARQ
}
+ public IndexLARQ(IndexWriter w)
+ {
+ this (w, new StandardAnalyzer(LARQ.LUCENE_VERSION)) ;
+ }
+
+ public IndexLARQ(IndexWriter w, Analyzer a)
+ {
+ writer = w ;
+ try {
+ reader = IndexReader.open(writer, true) ;
+ } catch (IOException e)
+ { throw new ARQLuceneException("IndexLARQ", e) ; }
+ searcher = new IndexSearcher(reader) ;
+ analyzer = a ;
+ luceneQueryParser = null ;
+ }
+
@Deprecated
/** Passing in a fixed QueryParser is not thread safe */
public IndexLARQ(IndexReader r, QueryParser qp)
{
+ writer = null ;
reader = r ;
searcher = new IndexSearcher(reader) ;
analyzer = qp.getAnalyzer() ;
@@ -139,6 +162,7 @@ public class IndexLARQ
public Iterator<HitLARQ> search(String queryString)
{
try{
+ final IndexSearcher searcher = getIndexSearcher() ;
Query query = getLuceneQueryParser().parse(queryString) ;
TopDocs topDocs = searcher.search(query, (Filter)null, LARQ.NUM_RESULTS ) ;
@@ -175,9 +199,25 @@ public class IndexLARQ
{ throw new ARQLuceneException("contains", e) ; }
}
+ private synchronized IndexSearcher getIndexSearcher() throws IOException {
+ if ( !reader.isCurrent() ) {
+ IndexReader newReader = reader.reopen(true) ;
+ reader.close();
+ reader = newReader;
+ searcher = new IndexSearcher(reader);
+ }
+
+ return searcher ;
+ }
+
public void close()
{
try{
+ if ( writer != null )
+ writer.close() ;
+ } catch (Exception e)
+ { throw new ARQLuceneException("close", e) ; }
+ try{
if ( reader != null )
reader.close() ;
} catch (Exception e)
Modified: incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/assembler/AssemblerLARQ.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/assembler/AssemblerLARQ.java?rev=1127048&r1=1127047&r2=1127048&view=diff
==============================================================================
--- incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/assembler/AssemblerLARQ.java (original)
+++ incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/assembler/AssemblerLARQ.java Tue May 24 13:43:13 2011
@@ -33,6 +33,7 @@ import org.apache.lucene.index.IndexRead
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.store.RAMDirectory;
import com.hp.hpl.jena.assembler.Assembler;
import com.hp.hpl.jena.assembler.Mode;
@@ -70,8 +71,15 @@ public class AssemblerLARQ extends Assem
public static IndexLARQ make (Dataset dataset, String indexPath) throws CorruptIndexException, IOException
{
- Directory directory = FSDirectory.open(new File(indexPath));
+ Directory directory;
+ if ( indexPath != null )
+ {
+ directory = FSDirectory.open(new File(indexPath));
+ } else {
+ directory = new RAMDirectory();
+ }
IndexReader indexReader = null;
+ IndexLARQ indexLARQ = null;
if ( dataset != null ) {
IndexWriter indexWriter = IndexWriterFactory.create(directory);
IndexBuilderModel larqBuilder = new IndexBuilderString(indexWriter) ;
@@ -81,10 +89,11 @@ public class AssemblerLARQ extends Assem
dataset.getNamedModel(g).register(larqBuilder) ;
}
indexReader = IndexReader.open(indexWriter, true);
+ indexLARQ = new IndexLARQ(indexWriter) ;
} else {
indexReader = IndexReader.open(directory, true) ; // read-only
+ indexLARQ = new IndexLARQ(indexReader) ;
}
- IndexLARQ indexLARQ = new IndexLARQ(indexReader) ;
LARQ.setDefaultIndex(indexLARQ) ;
return indexLARQ ;
}
Modified: incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TS_LARQ.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TS_LARQ.java?rev=1127048&r1=1127047&r2=1127048&view=diff
==============================================================================
--- incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TS_LARQ.java (original)
+++ incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TS_LARQ.java Tue May 24 13:43:13 2011
@@ -27,17 +27,21 @@ import org.junit.runners.Suite;
@Suite.SuiteClasses( {
TestLARQ_Code.class,
TestLARQ_Script.class,
- TestLARQ_Examples.class
+ TestLARQ_Examples.class,
+ TestAssemblerLARQ.class,
+ TestLuceneNRT.class
} )
public class TS_LARQ
{
- static public TestSuite suite()
- {
- TestSuite ts = new TestSuite(TS_LARQ.class.getName()) ;
- ts.addTest(TestLARQ_Code.suite()) ;
- ts.addTest(TestLARQ_Script.suite()) ;
- ts.addTest(TestLARQ_Examples.suite()) ;
- return ts ;
- }
+// Is this necessary? Why?
+//
+// static public TestSuite suite()
+// {
+// TestSuite ts = new TestSuite(TS_LARQ.class.getName()) ;
+// ts.addTest(TestLARQ_Code.suite()) ;
+// ts.addTest(TestLARQ_Script.suite()) ;
+// ts.addTest(TestLARQ_Examples.suite()) ;
+// return ts ;
+// }
}
Modified: incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TestAssemblerLARQ.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TestAssemblerLARQ.java?rev=1127048&r1=1127047&r2=1127048&view=diff
==============================================================================
--- incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TestAssemblerLARQ.java (original)
+++ incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TestAssemblerLARQ.java Tue May 24 13:43:13 2011
@@ -22,6 +22,13 @@ import static org.junit.Assert.assertNot
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import java.io.IOException;
+
+import org.apache.jena.larq.assembler.AssemblerLARQ;
+import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.store.RAMDirectory;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -30,6 +37,7 @@ import org.openjena.atlas.lib.FileOps;
import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.sparql.core.assembler.AssemblerUtils;
+import com.hp.hpl.jena.tdb.TDBFactory;
import com.hp.hpl.jena.tdb.assembler.VocabTDB;
import com.hp.hpl.jena.tdb.store.DatasetGraphTDB;
@@ -49,6 +57,7 @@ public class TestAssemblerLARQ {
{
FileOps.clearDirectory(tmpDir + "/tdb") ;
FileOps.clearDirectory(tmpDir + "/lucene") ;
+ LARQ.setDefaultIndex(null) ;
}
@AfterClass static public void afterClass()
@@ -71,6 +80,23 @@ public class TestAssemblerLARQ {
assertNotNull(LARQ.getDefaultIndex()) ;
ds.close() ;
+
+ IndexLARQ indexLARQ = LARQ.getDefaultIndex();
+ indexLARQ.close();
+ }
+
+ @Test public void testMake1() throws CorruptIndexException, IOException {
+ Dataset ds = TDBFactory.createDataset() ;
+ IndexLARQ indexLARQ = AssemblerLARQ.make(ds, tmpDir + "/lucene") ;
+ Directory directory = indexLARQ.getLuceneReader().directory() ;
+ assertTrue ( directory instanceof FSDirectory );
+ }
+
+ @Test public void testMake2() throws CorruptIndexException, IOException {
+ Dataset ds = TDBFactory.createDataset() ;
+ IndexLARQ indexLARQ = AssemblerLARQ.make(ds, null) ;
+ Directory directory = indexLARQ.getLuceneReader().directory() ;
+ assertTrue ( directory instanceof RAMDirectory );
}
}