All Downloads are FREE. Search and download functionalities are using the official Maven repository.

panda.idx.lucene.LuceneIndexerManager Maven / Gradle / Ivy

package panda.idx.lucene;

import java.io.IOException;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

import panda.idx.IndexException;
import panda.idx.Indexer;
import panda.idx.IndexerManager;


public class LuceneIndexerManager implements IndexerManager {
	public static final String DEFAULT = "default";
	
	protected Map indexes;

	public LuceneIndexerManager() {
		indexes = new HashMap();
	}

	protected Directory getDirectory(String name) {
		try {
			return FSDirectory.open(Paths.get(name));
		}
		catch (IOException e) {
			throw new IndexException("Failed to get lucene directory: " + name, e);
		}
	}
	
	protected Analyzer getAnalyzer(String name) {
		return new StandardAnalyzer();
	}
	
	@Override
	public synchronized Indexer getIndexer() {
		return getIndexer(DEFAULT);
	}
	
	@Override
	public synchronized Indexer getIndexer(String name) {
		LuceneIndexer li = indexes.get(name);
		if (li == null) {
			li = new LuceneIndexer(name, getDirectory(name), getAnalyzer(name));
			indexes.put(name, li);
		}
		return li;
	}

	protected synchronized void addIndexer(LuceneIndexer li) {
		indexes.put(li.name(), li);
	}

	@Override
	public synchronized void dropIndexer() {
		dropIndexer(DEFAULT);
	}
	
	@Override
	public synchronized void dropIndexer(String name) {
		LuceneIndexer li = indexes.remove(name);
		if (li == null) {
			return;
		}
		
		li.drop();
	}
	
	public synchronized void close() throws IOException {
		for (LuceneIndexer li : indexes.values()) {
			li.close();
		}
		indexes.clear();
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy