diff src/luan/modules/lucene/LuceneIndex.java @ 1398:67c0e47b5be3

more lucene
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 11 Sep 2019 15:48:49 -0600
parents 0dc9837c16be
children 38a1c1b4279a
line wrap: on
line diff
--- a/src/luan/modules/lucene/LuceneIndex.java	Wed Sep 11 01:31:21 2019 -0600
+++ b/src/luan/modules/lucene/LuceneIndex.java	Wed Sep 11 15:48:49 2019 -0600
@@ -85,7 +85,7 @@
 import luan.lib.logging.LoggerFactory;
 
 
-public final class LuceneIndex implements Closeable {
+public final class LuceneIndex {
 	private static final Logger sysLogger = LoggerFactory.getLogger(LuceneIndex.class);
 
 	private static Map<String,Reference<LuceneIndex>> indexes = new HashMap<String,Reference<LuceneIndex>>();
@@ -98,8 +98,12 @@
 			Reference<LuceneIndex> ref = indexes.get(key);
 			if( ref != null ) {
 				LuceneIndex li = ref.get();
-				if( li != null )
+				if( li != null ) {
+					Object version = options.get("version");
+					if( version==null || version.equals(li.version) )
+						return li;
 					li.closeWriter();
+				}
 			}
 			LuceneIndex li = new LuceneIndex(luan,indexDir,options);
 			indexes.put(key, new WeakReference<LuceneIndex>(li));
@@ -107,12 +111,13 @@
 		}
 	}
 
-	private static final Version version = Version.LUCENE_4_9;
+	private static final Version luceneVersion = Version.LUCENE_4_9;
 	private static final String FLD_NEXT_ID = "nextId";
 	public static final StringFieldParser STRING_FIELD_PARSER = new StringFieldParser(new KeywordAnalyzer());
-	public static final StringFieldParser ENGLISH_FIELD_PARSER = new StringFieldParser(new EnglishAnalyzer(version));
+	public static final StringFieldParser ENGLISH_FIELD_PARSER = new StringFieldParser(new EnglishAnalyzer(luceneVersion));
 
 	private final Logger luanLogger;
+	private final Object version;
 
 	private final ReentrantLock writeLock = new ReentrantLock();
 	private final File indexDir;
@@ -129,9 +134,6 @@
 	private AtomicInteger writeCounter = new AtomicInteger();
 
 	private Set<String> indexOnly = new HashSet<String>();
-
-	private boolean isClosed = false;
-	private final Exception created = new Exception("created");
 	private final FieldParser defaultFieldParser;
 	private final String[] defaultFields;
 
@@ -142,6 +144,7 @@
 		throws LuanException, IOException, ClassNotFoundException, SQLException
 	{
 		Map map = options.asMap();
+		this.version = map.remove("version");
 		FieldParser defaultFieldParser = (FieldParser)map.remove("default_type");
 		LuanTable defaultFieldsTbl = Utils.removeTable(map,"default_fields");
 		String[] defaultFields = defaultFieldsTbl==null ? null : (String[])defaultFieldsTbl.asList().toArray(new String[0]);
@@ -180,19 +183,10 @@
 */
 			}
 		}
-		luan.onClose(this);
-	}
-
-	protected void finalize() throws Throwable {
-		if( !isClosed ) {
-			sysLogger.error("not closed",created);
-			close();
-		}
-		super.finalize();
 	}
 
 	public boolean reopen() throws IOException {
-		IndexWriterConfig conf = new IndexWriterConfig(version,analyzer);
+		IndexWriterConfig conf = new IndexWriterConfig(luceneVersion,analyzer);
 		snapshotDeletionPolicy = new SnapshotDeletionPolicy(conf.getIndexDeletionPolicy());
 		conf.setIndexDeletionPolicy(snapshotDeletionPolicy);
 		fsDir = FSDirectory.open(indexDir);
@@ -434,26 +428,22 @@
 		return writer.getDirectory().toString();
 	}
 
-	public synchronized void close() throws IOException {
-		try {
-			doClose();
-		} catch(SQLException e) {
-			throw new RuntimeException(e);
-		}
-		isClosed = true;
+	protected void finalize() throws Throwable {
+		close();
+		super.finalize();
 	}
 
-	public void doClose() throws IOException, SQLException {
-		writer.close();
+	public void close() throws IOException, SQLException {
+		closeWriter();
 		reader.close();
-		if( postgresBackup != null )
-			postgresBackup.close();
 	}
 
-	private void closeWriter() throws IOException {
+	private void closeWriter() throws IOException, SQLException {
 		writeLock.lock();
 		try {
 			writer.close();
+			if( postgresBackup != null )
+				postgresBackup.close();
 		} finally {
 			writeLock.unlock();
 		}
@@ -860,7 +850,6 @@
 		if( postgresBackup!=null && wasCreated && !postgresBackup.wasCreated ) {
 			luanLogger.error("restoring from postgres");
 			force_restore_from_postgres();
-			wasCreated = false;
 		}
 	}
 
@@ -882,6 +871,7 @@
 			saveNextId(nextId);
 			ok = true;
 			writer.commit();
+			wasCreated = false;
 		} finally {
 			if( !ok ) {
 				writer.rollback();