Regain 1.7.7-STABLE API

net.sf.regain.search
Class IndexSearcherManager

java.lang.Object
  extended by net.sf.regain.search.IndexSearcherManager

public class IndexSearcherManager
extends Object

Kapselt die Suche auf dem Suchindex.

Alle Suchanfragen werden synchronisiert. Au�erdem wird im 10-Sekunden-Takt gePrüft, ob ein neuer Index verfügbar ist. Wenn ja, dann wird der neue Index übernommen und der alte in einem Backup gesichert.

Author:
Til Schneider, www.murfman.de

Field Summary
private static String BACKUP_INDEX_SUBDIR
          Der Name des Index-Unterverzeichnisses, in das der letzte Index gesichert werden soll.
private static int INDEX_UPDATE_THREAD_SLEEPTIME
          Die Zeit in Millisekunden in der der Update-Thread zwischen zwei Update-Pr�fungen schlafen 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 mFieldTermHash
          Holds for a field name (String) all distinct values the index has for that field (String[]).
private static HashMap mIndexManagerHash
          enthält für ein Index-Verzeichnis (key) den zust�ndigen IndexWriterManager (value).
private  org.apache.lucene.index.IndexReader mIndexReader
          The IndexReader to use for reading information from an index.
private  org.apache.lucene.search.IndexSearcher mIndexSearcher
          Der IndexSearcher auf dem die Suchen erfolgen.
private  Thread 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  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()
          Prüft, ob ein neuer Index vorhanden ist.
 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.index.IndexReader getIndexReader()
          Gets an IndexReader for the index.
 org.apache.lucene.search.IndexSearcher getIndexSearcher()
          Returns the IndexSearcher.
static IndexSearcherManager getInstance(String indexDir)
          Gibt den IndexSearcherManager für das gegebene Index-Verzeichnis zurück.
(package private)  void indexUpdateThreadRun()
          Die run()-Methode des Index-Update-Thread.
 org.apache.lucene.search.Query rewrite(org.apache.lucene.search.Query query)
          Rewrites the query for better highlighting of wildcard and fuzzy searches- Contribution: Anders Larsson, 2009
 org.apache.lucene.search.ScoreDoc[] search(org.apache.lucene.search.Query query)
          Sucht im Suchindex.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

INDEX_UPDATE_THREAD_SLEEPTIME

private static final int INDEX_UPDATE_THREAD_SLEEPTIME
Die Zeit in Millisekunden in der der Update-Thread zwischen zwei Update-Pr�fungen schlafen soll.

See Also:
Constant Field Values

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 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.


mIndexSearcher

private org.apache.lucene.search.IndexSearcher mIndexSearcher
Der IndexSearcher auf dem die Suchen erfolgen.

Die Klasse IndexSearcher ist zwar thread-sicher, aber wir synchronisieren trotzdem alle Suchanfragen selbst, damit ein Austausch des Suchindex im laufenden Betrieb m�glich ist.


mIndexReader

private org.apache.lucene.index.IndexReader mIndexReader
The IndexReader to use for reading information from an index.


mAnalyzer

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


mIndexUpdateThread

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


mFieldTermHash

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

Constructor Detail

IndexSearcherManager

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

Parameters:
indexDir - Das Verzeichnis, in dem der Index steht.
Method Detail

getInstance

public static IndexSearcherManager getInstance(String indexDir)
Gibt den IndexSearcherManager für das gegebene Index-Verzeichnis zurück.

Parameters:
indexDir - Das Verzeichnis, in dem der Index steht.
Returns:
Der IndexWriterManager für das Index-Verzeichnis.

search

public org.apache.lucene.search.ScoreDoc[] search(org.apache.lucene.search.Query query)
                                           throws RegainException
Sucht im Suchindex.

Hinweis: Suchen und Update-Checks laufen synchronisiert ab (also niemals gleichzeitig).

Parameters:
query - Die Suchanfrage.
Returns:
Die gefundenen Treffer.
Throws:
RegainException - Wenn die Suche fehl schlug.

getIndexReader

public org.apache.lucene.index.IndexReader getIndexReader()
                                                   throws RegainException
Gets an IndexReader for the index.

NOTE: Must be called in a synchronized block.

Returns:
An IndexReader for the index.
Throws:
RegainException - If creating the IndexReader failed.

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.

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.

indexUpdateThreadRun

void indexUpdateThreadRun()
Die run()-Methode des Index-Update-Thread.

See Also:
mIndexUpdateThread

checkForIndexUpdate

private void checkForIndexUpdate()
                          throws RegainException
Prüft, ob ein neuer Index vorhanden ist. Wenn ja, dann wird die Suche auf den neuen Index umgestellt.

Hinweis: Suchen und Update-Checks laufen synchronisiert ab (also niemals gleichzeitig).

Throws:
RegainException - Falls die Umstellung auf den neuen Index fehl schlug.

rewrite

public org.apache.lucene.search.Query rewrite(org.apache.lucene.search.Query query)
                                       throws RegainException
Rewrites the query for better highlighting of wildcard and fuzzy searches- Contribution: Anders Larsson, 2009

Parameters:
query - to be rewritten
Returns:
rewritten query
Throws:
RegainException

getIndexSearcher

public org.apache.lucene.search.IndexSearcher getIndexSearcher()
                                                        throws RegainException
Returns the IndexSearcher.

Returns:
the IndexSearcher
Throws:
RegainException

Regain 1.7.7-STABLE API

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