Regain 2.1.0-STABLE API

net.sf.regain.search
Class IndexSearcherManager

java.lang.Object
  extended by net.sf.regain.search.IndexSearcherManager
All Implemented Interfaces:
Closeable

public class IndexSearcherManager
extends Object
implements Closeable

Encapsulates the search on the lucene search index.

Additionally, every 10 seconds we check if there is a new index available. Search queries cannot be execute during index update. If yes, the new index is used and the old saved in /backup/.

Author:
Til Schneider, www.murfman.de

Nested Class Summary
private  class IndexSearcherManager.IndexUpdateThread
          WARNING: Thread Programming ahead.
 
Field Summary
private static String BACKUP_INDEX_SUBDIR
          Der Name des Index-Unterverzeichnisses, in das der letzte Index gesichert werden soll.
private  org.apache.lucene.analysis.Analyzer mAnalyzer
          Der Analyzer, der für Suchen verwendet werden soll.
private  File mBackupIndexDir
          Das Verzeichnis, in das der letzte Index gesichert werden soll.
private  HashMap<String,String[]> mFieldTermHash
          Holds for a field name (String) all distinct values the index has for that field (String[]).
private static HashMap<String,IndexSearcherManager> mIndexManagerHash
          enthält für ein Index-Verzeichnis (key) den zust�ndigen IndexWriterManager (value).
private  IndexSearcherManager.IndexUpdateThread mIndexUpdateThread
          Der Thread, der alle 10 Sekunden Prüft, ob ein neuer Suchindex vorhanden ist.
private  File mNewIndexDir
          Das Verzeichnis, in das der neue Index gestellt wird, sobald er fertig ist.
private  org.apache.lucene.search.SearcherManager mSearcherManager
          Keeps reference of the current IndexSearcher.
private  File mWorkingIndexDir
          Das Verzeichnis, in dem der genutzte Index steht.
private static String NEW_INDEX_SUBDIR
          Der Name des Index-Unterverzeichnisses, in das der neue Index gestellt wird, sobald er fertig ist.
private static String WORKING_INDEX_SUBDIR
          Der Name des Index-Unterverzeichnisses, in dem der genutzte Index steht.
 
Constructor Summary
private IndexSearcherManager(String indexDir)
          Erzeugt eine neue IndexWriterManager-Instanz.
 
Method Summary
private  void checkForIndexUpdate()
          Check if there is a new index available.
 void close()
           
static void closeAll()
           
protected  void createAnalyzer()
           
private  void ensureIndexDirExists()
          Check if the index directory exists.
 org.apache.lucene.analysis.Analyzer getAnalyzer()
          Gibt den Analyzer zurück, der für die Suche genutzt werden soll.
 int getDocumentCount()
          Gets the total number of documents in the index.
 String[] getFieldValues(String field)
          Gets all distinct values a index has for a certain field.
 org.apache.lucene.search.IndexSearcher getIndexSearcher()
          Returns the IndexSearcher.
static IndexSearcherManager getInstance(String indexDir)
          Return the index searcher manager of a specific directory.
protected  String[] readFieldValues(String field)
          Read files from index cache file (synchronised, as this requires an searchindex/index directory)
 void releaseIndexSearcher(org.apache.lucene.search.IndexSearcher searcher)
          Release an indexSearcher that was acquired by getIndexSearcher() NOTE: It musn't be used afterwards!
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NEW_INDEX_SUBDIR

private static final String NEW_INDEX_SUBDIR
Der Name des Index-Unterverzeichnisses, in das der neue Index gestellt wird, sobald er fertig ist.

Wenn dieses Verzeichnis existiert, dann wird die Suche auf den darin enthaltenen Index umgestellt.

See Also:
Constant Field Values

WORKING_INDEX_SUBDIR

private static final String WORKING_INDEX_SUBDIR
Der Name des Index-Unterverzeichnisses, in dem der genutzte Index steht.

See Also:
Constant Field Values

BACKUP_INDEX_SUBDIR

private static final String BACKUP_INDEX_SUBDIR
Der Name des Index-Unterverzeichnisses, in das der letzte Index gesichert werden soll.

See Also:
Constant Field Values

mIndexManagerHash

private static HashMap<String,IndexSearcherManager> mIndexManagerHash
enthält für ein Index-Verzeichnis (key) den zust�ndigen IndexWriterManager (value).


mNewIndexDir

private File mNewIndexDir
Das Verzeichnis, in das der neue Index gestellt wird, sobald er fertig ist.

Wenn dieses Verzeichnis existiert, dann wird die Suche auf den darin enthaltenen Index umgestellt.


mWorkingIndexDir

private File mWorkingIndexDir
Das Verzeichnis, in dem der genutzte Index steht.


mBackupIndexDir

private File mBackupIndexDir
Das Verzeichnis, in das der letzte Index gesichert werden soll.


mAnalyzer

private org.apache.lucene.analysis.Analyzer mAnalyzer
Der Analyzer, der für Suchen verwendet werden soll.


mIndexUpdateThread

private IndexSearcherManager.IndexUpdateThread mIndexUpdateThread
Der Thread, der alle 10 Sekunden Prüft, ob ein neuer Suchindex vorhanden ist.


mFieldTermHash

private HashMap<String,String[]> mFieldTermHash
Holds for a field name (String) all distinct values the index has for that field (String[]).


mSearcherManager

private org.apache.lucene.search.SearcherManager mSearcherManager
Keeps reference of the current IndexSearcher.

Constructor Detail

IndexSearcherManager

private IndexSearcherManager(String indexDir)
                      throws RegainException
Erzeugt eine neue IndexWriterManager-Instanz.

Parameters:
indexDir - Das Verzeichnis, in dem der Index steht.
Throws:
RegainException - Wenn kein Index-Verzeichnis existiert.
Method Detail

getInstance

public static IndexSearcherManager getInstance(String indexDir)
                                        throws RegainException
Return the index searcher manager of a specific directory.

Parameters:
indexDir - Directory of the index.
Returns:
An instance of the corresponding index searcher manager.
Throws:
RegainException - If the directory does not exist or is not an index.

getFieldValues

public String[] getFieldValues(String field)
                        throws RegainException
Gets all distinct values a index has for a certain field. The values are sorted alphabetically.

Parameters:
field - The field to get the values for.
Returns:
All distinct values the index has for the field.
Throws:
RegainException - If reading the values failed.

readFieldValues

protected String[] readFieldValues(String field)
                            throws RegainException
Read files from index cache file (synchronised, as this requires an searchindex/index directory)

Parameters:
field - The field to get the values for.
Returns:
All distinct values the index has for the field.
Throws:
RegainException - If reading the values failed.

getDocumentCount

public int getDocumentCount()
                     throws RegainException
Gets the total number of documents in the index.

Returns:
The total number of documents in the index.
Throws:
RegainException - If getting the document count failed.

getAnalyzer

public org.apache.lucene.analysis.Analyzer getAnalyzer()
                                                throws RegainException
Gibt den Analyzer zurück, der für die Suche genutzt werden soll.

Returns:
Der Analyzer.
Throws:
RegainException - Wenn die Erzeugung des Analyzers fehl schlug.

createAnalyzer

protected void createAnalyzer()
                       throws RegainException
Throws:
RegainException

ensureIndexDirExists

private void ensureIndexDirExists()
                           throws RegainException
Check if the index directory exists. If not,

Throws:
RegainException

checkForIndexUpdate

private void checkForIndexUpdate()
                          throws RegainException
Check if there is a new index available. If so, prepare it by renaming the dirs - it will be opened at the next search.

NOTE: We synchronize this index update with all methods that directly access the underlying files.

Throws:
RegainException - If error during update of index.

getIndexSearcher

public org.apache.lucene.search.IndexSearcher getIndexSearcher()
                                                        throws RegainException
Returns the IndexSearcher. Must be released after use: try { indexSearcher = getIndexSearcher(); ... } finally { indexManager.releaseIndexSearcher(indexSearcher); indexSearcher = null; }

Returns:
the IndexSearcher
Throws:
RegainException

releaseIndexSearcher

public void releaseIndexSearcher(org.apache.lucene.search.IndexSearcher searcher)
                          throws RegainException
Release an indexSearcher that was acquired by getIndexSearcher() NOTE: It musn't be used afterwards!

Parameters:
searcher - Reference to the index searcher. (Null is silently ignored.)
Throws:
RegainException

close

public void close()
           throws IOException
Specified by:
close in interface Closeable
Throws:
IOException

closeAll

public static void closeAll()
                     throws IOException
Throws:
IOException

Regain 2.1.0-STABLE API

Regain 2.1.0-STABLE, Copyright (C) 2004-2010 Til Schneider, www.murfman.de, Thomas Tesche, www.clustersystems.info