knguyen 2005/05/24 20:13:40 CEST
Modified files: (Branch: JAHIA-4-1-BRANCH)
src/java/org/jahia/services/search AddedField.java
JahiaIndexableDocument.java
JahiaIndexableDocumentImpl.java
JahiaSearchBaseService.java
JahiaSearchService.java
ScheduledSiteIndexationJob.java
SearchEngine.java
Added files: (Branch: JAHIA-4-1-BRANCH)
src/java/org/jahia/services/search RAMIndexer.java
Log:
- use an in-memory indexer ( limited in size ) as an index buffer for
indexing the most recently updated content in a synchronous manner.
Revision Changes Path
1.14.2.8.2.7 +13 -0
jahia/src/java/org/jahia/services/search/AddedField.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/AddedField.java.diff?r1=1.14.2.8.2.6&r2=1.14.2.8.2.7&f=h
1.5.4.3 +6 -0
jahia/src/java/org/jahia/services/search/JahiaIndexableDocument.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/JahiaIndexableDocument.java.diff?r1=1.5.4.2&r2=1.5.4.3&f=h
1.5.2.1.2.3 +15 -0
jahia/src/java/org/jahia/services/search/JahiaIndexableDocumentImpl.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/JahiaIndexableDocumentImpl.java.diff?r1=1.5.2.1.2.2&r2=1.5.2.1.2.3&f=h
1.42.2.15.2.10 +163 -90
jahia/src/java/org/jahia/services/search/JahiaSearchBaseService.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/JahiaSearchBaseService.java.diff?r1=1.42.2.15.2.9&r2=1.42.2.15.2.10&f=h
1.10.4.2.2.4 +29 -0
jahia/src/java/org/jahia/services/search/JahiaSearchService.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/JahiaSearchService.java.diff?r1=1.10.4.2.2.3&r2=1.10.4.2.2.4&f=h
1.1.2.1 +200 -0
jahia/src/java/org/jahia/services/search/RAMIndexer.java (new)
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/RAMIndexer.java?rev=1.1.2.1&content-type=text/plain
1.1.2.5 +1 -1
jahia/src/java/org/jahia/services/search/ScheduledSiteIndexationJob.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/ScheduledSiteIndexationJob.java.diff?r1=1.1.2.4&r2=1.1.2.5&f=h
1.17.2.1.2.1 +41 -6
jahia/src/java/org/jahia/services/search/SearchEngine.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/SearchEngine.java.diff?r1=1.17.2.1&r2=1.17.2.1.2.1&f=h
Index: AddedField.java
===================================================================
RCS file:
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/AddedField.java,v
retrieving revision 1.14.2.8.2.6
retrieving revision 1.14.2.8.2.7
diff -u -r1.14.2.8.2.6 -r1.14.2.8.2.7
--- AddedField.java 18 May 2005 13:54:58 -0000 1.14.2.8.2.6
+++ AddedField.java 24 May 2005 18:13:40 -0000 1.14.2.8.2.7
@@ -377,4 +377,17 @@
this.getFields();
}
+ /**
+ * Return true if this document is allowed to be indexed by RAMIndexer
+ *
+ * @return
+ */
+ public boolean isCacheableWithRAMIndexer() {
+ if ( this.getType() == FieldTypes.FILE ||
+ !super.isCacheableWithRAMIndexer() ){
+ return false;
+ }
+ return true;
+ }
+
}
Index: JahiaIndexableDocument.java
===================================================================
RCS file:
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaIndexableDocument.java,v
retrieving revision 1.5.4.2
retrieving revision 1.5.4.3
diff -u -r1.5.4.2 -r1.5.4.3
--- JahiaIndexableDocument.java 27 Apr 2005 13:41:11 -0000 1.5.4.2
+++ JahiaIndexableDocument.java 24 May 2005 18:13:40 -0000 1.5.4.3
@@ -166,4 +166,10 @@
public abstract void doScheduledLoad();
+ /**
+ * Return true if this document is allowed to be indexed by RAMIndexer
+ *
+ * @return
+ */
+ public boolean isCacheableWithRAMIndexer();
}
Index: JahiaIndexableDocumentImpl.java
===================================================================
RCS file:
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaIndexableDocumentImpl.java,v
retrieving revision 1.5.2.1.2.2
retrieving revision 1.5.2.1.2.3
diff -u -r1.5.2.1.2.2 -r1.5.2.1.2.3
--- JahiaIndexableDocumentImpl.java 27 Apr 2005 13:41:11 -0000
1.5.2.1.2.2
+++ JahiaIndexableDocumentImpl.java 24 May 2005 18:13:40 -0000
1.5.2.1.2.3
@@ -30,6 +30,8 @@
protected boolean toBeAdded = true;
+ protected boolean isCacheableWithRAMIndexer = true;
+
/**
* @param siteId
@@ -269,4 +271,17 @@
// by default do nothing
}
+ /**
+ * Return true if this document is allowed to be indexed by RAMIndexer
+ *
+ * @return
+ */
+ public boolean isCacheableWithRAMIndexer() {
+ return this.isCacheableWithRAMIndexer;
+ }
+
+ public void setCacheableWithRAMIndexer(boolean cacheableWithRAMIndexer) {
+ this.isCacheableWithRAMIndexer = cacheableWithRAMIndexer;
+ }
+
}
Index: JahiaSearchBaseService.java
===================================================================
RCS file:
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaSearchBaseService.java,v
retrieving revision 1.42.2.15.2.9
retrieving revision 1.42.2.15.2.10
diff -u -r1.42.2.15.2.9 -r1.42.2.15.2.10
--- JahiaSearchBaseService.java 23 May 2005 19:35:15 -0000
1.42.2.15.2.9
+++ JahiaSearchBaseService.java 24 May 2005 18:13:40 -0000
1.42.2.15.2.10
@@ -103,10 +103,14 @@
private BeanFactory fileExtractorsFactory = null;
+ private Properties searchSettings = null;
+
private Cache fullSiteIndexationJobsCache;
private HashMap sitesLastOptimizedTime = new HashMap();
+ private RAMIndexer ramIndexer;
+
/**
* Constructor
* Client should always call getInstance() method
@@ -115,6 +119,7 @@
logger.debug ("***** Starting the Jahia Search Service *****");
String[] stopWorld = {};
analyzer = new StandardAnalyzer (stopWorld);
+
searchHandlers = new Properties ();
searchHandlers.setProperty (JahiaSearcher.PAGE_SEARCHER,
"doPageSearch");
searchHandlers.setProperty (JahiaSearcher.CONTAINER_SEARCHER,
@@ -147,6 +152,8 @@
configureSystemProperties();
+ loadSearchSettings();
+
indexOrdersCache = CacheFactory.getInstance().createCache(
SEARCH_INDEX_ORDERS_CACHE);
indexOrdersCache.registerListener(this);
@@ -238,6 +245,23 @@
}
}
+ private void loadSearchSettings() throws JahiaInitializationException{
+ searchSettings =
(Properties)Jahia.getConfigBeanFactory().getBean("searchSettings");
+ if ( searchSettings == null ){
+ throw new JahiaInitializationException("searchSettings bean not
found in config.xml");
+ }
+ String val = searchSettings.getProperty("inMemoryIndexe.allowed");
+ if ( "true".equalsIgnoreCase(val) ){
+ int i = 1000;
+ try {
+ i = Integer.parseInt(searchSettings
+ .getProperty("inMemoryIndexe.maxDocs"));
+ } catch ( Throwable t ){
+ }
+ this.ramIndexer = new RAMIndexer(analyzer,i);
+ }
+ }
+
private void startScheduledIndexationJob(){
this.scheduledIndexationJob = new
IndexationJobDetail("scheduledIndexation" + "_Job", Scheduler.DEFAULT_GROUP,
@@ -318,6 +342,10 @@
notifyAll();
}
// give it a change to finish right now if it's not processing
anything.
+ if ( this.ramIndexer != null ){
+ this.ramIndexer.shutDown();
+ }
+
Thread.yield();
mIsServiceInitialized = false;
}
@@ -345,11 +373,21 @@
addToIndexOrder(indObj);
}
indexOrdersCache.put(getCacheKey(indObj), indObj);
+ addToRAMIndexer(indObj,indObj.getSiteId());
synchronized(lock){
lock.notifyAll();
}
}
+ private void addToRAMIndexer(JahiaIndexableDocument doc, int siteId){
+ if ( ramIndexer == null || doc == null ){
+ return;
+ }
+ if ( doc.isCacheableWithRAMIndexer() ){
+ ramIndexer.addDoc(getLuceneDocument(doc), siteId);
+ }
+ }
+
/**
* this method is should only be used by the ScheduledIndexationJob to
return back a scheduled document in the indexation queue without sending it to
the other clusters
*
@@ -373,9 +411,10 @@
}
private void addToIndexOrder(JahiaIndexableDocument indObj){
- if ( indObj == null ){
- return;
- }
+ if ( indObj == null ){
+ return;
+ }
+
JahiaIndexableDocument doc = null;
int size = this.indexOrders.size();
Vector result = new Vector();
@@ -453,6 +492,10 @@
removeFromSearchEngine (doc);
}
+ public RAMIndexer getRAMIndexer(){
+ return ramIndexer;
+ }
+
//--------------------------------------------------------------------------
/**
* Perform a search for a given JahiaSearcher object.
@@ -464,7 +507,6 @@
public JahiaSearchResult search (JahiaSearcher jSearcher, ParamBean
jParams)
throws JahiaException {
logger.debug ("Started");
-
JahiaSearchResult result = null;
IndexReader reader = null;
try {
@@ -533,50 +575,62 @@
public synchronized void indexField (int fieldID,
boolean stagingOnly,
ParamBean jParams) {
+ indexField(fieldID,stagingOnly,jParams,false);
+ }
- ServicesRegistry sReg = ServicesRegistry.getInstance ();
-
- try {
- // init the JahiaContentFieldFacade
-
- ContentField contentField = ContentField.getField (fieldID);
- ArrayList localeList = new ArrayList ();
- Vector siteLanguageSettings = jParams.getSite
().getLanguageSettings ();
- if (siteLanguageSettings != null) {
- for (int i = 0; i < siteLanguageSettings.size (); i++) {
- SiteLanguageSettings curSetting = (SiteLanguageSettings)
- siteLanguageSettings.elementAt (i);
- if (curSetting.isActivated ()) {
- Locale tempLocale = LanguageCodeConverters.
- languageCodeToLocale (curSetting.
- getCode ());
- localeList.add (tempLocale);
- }
- }
- }
-
- JahiaContentFieldFacade jahiaContentFieldFacade =
- new JahiaContentFieldFacade (fieldID, LoadFlags.TEXTS,
jParams,
- localeList, false);
- Enumeration enum = jahiaContentFieldFacade.getFields ();
- JahiaField aField = null;
- while (enum.hasMoreElements ()) {
- aField = (JahiaField) enum.nextElement ();
- if ( stagingOnly && aField.getWorkflowState()
- == EntryLoadRequest.ACTIVE_WORKFLOW_STATE ){
- continue;
- }
- /*
- if ( aField.getVersionID()
- == EntryLoadRequest.DELETED_WORKFLOW_STATE ){
- continue;
- }*/
+
//--------------------------------------------------------------------------
+ /**
+ * Re-index a field.
+ *
+ * @param fieldID int
+ * @param stagingOnly boolean, if false, skip re-index active version
+ * @param jParams ParamBean
+ * @param allowInMemoryIndexe boolean if true, index in in memory index (
temporary and limited momory-size index )
+ */
+ public synchronized void indexField (int fieldID,
+ boolean stagingOnly,
+ ParamBean jParams,
+ boolean allowInMemoryIndexe ) {
+ ServicesRegistry sReg = ServicesRegistry.getInstance ();
+
+ try {
+ // init the JahiaContentFieldFacade
+
+ ContentField contentField = ContentField.getField (fieldID);
+ ArrayList localeList = new ArrayList ();
+ Vector siteLanguageSettings = jParams.getSite
().getLanguageSettings ();
+ if (siteLanguageSettings != null) {
+ for (int i = 0; i < siteLanguageSettings.size (); i++) {
+ SiteLanguageSettings curSetting = (SiteLanguageSettings)
+ siteLanguageSettings.elementAt (i);
+ if (curSetting.isActivated ()) {
+ Locale tempLocale = LanguageCodeConverters.
+ languageCodeToLocale (curSetting.
+ getCode ());
+ localeList.add (tempLocale);
+ }
+ }
+ }
- this.addFieldToSearchEngine (aField, aField.getWorkflowState
());
- }
- } catch (Throwable t) {
- t.printStackTrace ();
- }
+ JahiaContentFieldFacade jahiaContentFieldFacade =
+ new JahiaContentFieldFacade (fieldID, LoadFlags.TEXTS,
jParams,
+ localeList, false);
+ Enumeration enum = jahiaContentFieldFacade.getFields ();
+ JahiaField aField = null;
+ while (enum.hasMoreElements ()) {
+ aField = (JahiaField) enum.nextElement ();
+ if ( stagingOnly && aField.getWorkflowState()
+ == EntryLoadRequest.ACTIVE_WORKFLOW_STATE ){
+ continue;
+ }
+
+ this.addFieldToSearchEngine (aField,
+ aField.getWorkflowState (),
+ allowInMemoryIndexe);
+ }
+ } catch (Throwable t) {
+ t.printStackTrace ();
+ }
}
//--------------------------------------------------------------------------
@@ -590,53 +644,70 @@
*/
public synchronized void addFieldToSearchEngine (JahiaField aField,
int workflowState) {
- if (aField == null)
- return;
-
- int wfState = workflowState;
- if (wfState > EntryLoadRequest.ACTIVE_WORKFLOW_STATE) {
- wfState = EntryLoadRequest.STAGING_WORKFLOW_STATE;
- }
-
- try {
- HashMap values = aField.getValuesForSearch ();
- if (values == null || values.size () == 0) {
- return;
- }
- Iterator iterator = values.keySet ().iterator ();
- while (iterator.hasNext ()) {
- String languageCode = (String) iterator.next ();
-
- StringBuffer key = new StringBuffer (String.valueOf
(aField.getID()));
- key.append ("_");
- key.append (wfState);
- key.append ("_");
- key.append (languageCode);
-
- AddedField addedField = new AddedField (aField, wfState,
- JahiaSearchConstant.FIELD_KEY, key.toString());
- addedField.setLanguageCode (languageCode);
- Object[] value = (Object[]) values.get (languageCode);
- addedField.setValues (value);
- if (addedField.beforeAddingToSearchEngine ()) {
- if ( this.localIndexing ){
- addToIndexOrder(addedField);
- }
- indexOrdersCache.put(getCacheKey(addedField),addedField);
- }
- }
- } catch (Throwable t) {
- t.printStackTrace ();
- } finally {
- synchronized(lock){
- lock.notifyAll();
- }
- }
-
+ addFieldToSearchEngine(aField, workflowState, false);
}
//--------------------------------------------------------------------------
/**
+ * Add a field to search engine.
+ * With updated field, you should remove it first from search engine
before
+ * adding it again.
+ *
+ * @param JahiaField aField, the field to index.
+ * @param workflowState effective workflow state to use
+ * @param allowInMemoryIndexe boolean if true, index in in memory index
( temporary and limited momory-size index )
+ */
+ public synchronized void addFieldToSearchEngine (JahiaField aField,
+ int workflowState,
+ boolean
allowInMemoryIndexe) {
+ if (aField == null)
+ return;
+
+ int wfState = workflowState;
+ if (wfState > EntryLoadRequest.ACTIVE_WORKFLOW_STATE) {
+ wfState = EntryLoadRequest.STAGING_WORKFLOW_STATE;
+ }
+
+ try {
+ HashMap values = aField.getValuesForSearch ();
+ if (values == null || values.size () == 0) {
+ return;
+ }
+ Iterator iterator = values.keySet ().iterator ();
+ while (iterator.hasNext ()) {
+ String languageCode = (String) iterator.next ();
+
+ StringBuffer key = new StringBuffer (String.valueOf
(aField.getID()));
+ key.append ("_");
+ key.append (wfState);
+ key.append ("_");
+ key.append (languageCode);
+
+ AddedField addedField = new AddedField (aField, wfState,
+ JahiaSearchConstant.FIELD_KEY, key.toString());
+ addedField.setLanguageCode (languageCode);
+ Object[] value = (Object[]) values.get (languageCode);
+ addedField.setValues (value);
+ if (addedField.beforeAddingToSearchEngine ()) {
+ if ( this.localIndexing ){
+ addToIndexOrder(addedField);
+ }
+
addedField.setCacheableWithRAMIndexer(allowInMemoryIndexe);
+ addToRAMIndexer(addedField, addedField.getSiteId());
+
indexOrdersCache.put(getCacheKey(addedField),addedField);
+ }
+ }
+ } catch (Throwable t) {
+ t.printStackTrace ();
+ } finally {
+ synchronized(lock){
+ lock.notifyAll();
+ }
+ }
+ }
+
+
//--------------------------------------------------------------------------
+ /**
* Remove a field from search engine.Remove all entry ( all
lang,workflow...)
*
* @param JahiaField aField, the field to remove.
@@ -1536,7 +1607,9 @@
if ( SEARCH_INDEX_ORDERS_CACHE.equals(cacheName)
&& entryKey != null && entryValue != null ){
CacheEntry cacheEntry = (CacheEntry)entryValue;
- addToIndexOrder((JahiaIndexableDocument)cacheEntry.getObject());
+ JahiaIndexableDocument doc =
(JahiaIndexableDocument)cacheEntry.getObject();
+ addToIndexOrder(doc);
+ addToRAMIndexer(doc,doc.getSiteId());
logger.debug("Search Cache listener : added value in
indexOrders");
synchronized(lock){
lock.notifyAll();
Index: JahiaSearchService.java
===================================================================
RCS file:
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaSearchService.java,v
retrieving revision 1.10.4.2.2.3
retrieving revision 1.10.4.2.2.4
diff -u -r1.10.4.2.2.3 -r1.10.4.2.2.4
--- JahiaSearchService.java 20 May 2005 11:45:50 -0000 1.10.4.2.2.3
+++ JahiaSearchService.java 24 May 2005 18:13:40 -0000 1.10.4.2.2.4
@@ -125,6 +125,19 @@
//--------------------------------------------------------------------------
/**
+ * Re-index a field.
+ *
+ * @param fieldID int
+ * @param stagingOnly boolean, if false, skip re-index active version
+ * @param jParams ParamBean
+ * @param allowInMemoryIndexe boolean if true, index in in memory index
( temporary and limited momory-size index )
+ */
+ public abstract void indexField (int fieldID,
+ boolean stagingOnly,
+ ParamBean jParams, boolean
allowInMemoryIndexe);
+
+
//--------------------------------------------------------------------------
+ /**
* Add a field to search engine.
* With updated field, you should remove it first from search engine
before
* adding it again.
@@ -136,6 +149,20 @@
//--------------------------------------------------------------------------
/**
+ * Add a field to search engine.
+ * With updated field, you should remove it first from search engine
before
+ * adding it again.
+ *
+ * @param JahiaField aField, the field to index.
+ * @param workflowState effective workflow state to use
+ * @param allowInMemoryIndexe boolean if true, index in in memory index
( temporary and limited momory-size index )
+ */
+ public abstract void addFieldToSearchEngine (JahiaField aField,
+ int workflowState,
+ boolean
allowInMemoryIndexe);
+
+
//--------------------------------------------------------------------------
+ /**
* Remove a field from search engine.
*
* @param JahiaField aField, the field to remove.
@@ -245,4 +272,6 @@
*/
public abstract int getNbDocumentsInQueue();
+ public abstract RAMIndexer getRAMIndexer();
+
}
Index: ScheduledSiteIndexationJob.java
===================================================================
RCS file:
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/ScheduledSiteIndexationJob.java,v
retrieving revision 1.1.2.4
retrieving revision 1.1.2.5
diff -u -r1.1.2.4 -r1.1.2.5
--- ScheduledSiteIndexationJob.java 23 May 2005 19:35:15 -0000 1.1.2.4
+++ ScheduledSiteIndexationJob.java 24 May 2005 18:13:40 -0000 1.1.2.5
@@ -90,7 +90,7 @@
}
}
try {
-
sReg.getJahiaSearchService().indexField(fieldID,false,jParams);
+
sReg.getJahiaSearchService().indexField(fieldID,false,jParams,false);
}
catch (Throwable t) {
// page could not exists
Index: SearchEngine.java
===================================================================
RCS file:
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/SearchEngine.java,v
retrieving revision 1.17.2.1
retrieving revision 1.17.2.1.2.1
diff -u -r1.17.2.1 -r1.17.2.1.2.1
--- SearchEngine.java 20 Oct 2004 15:08:56 -0000 1.17.2.1
+++ SearchEngine.java 24 May 2005 18:13:40 -0000 1.17.2.1.2.1
@@ -20,10 +20,7 @@
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.document.Document;
-import org.apache.lucene.search.Hits;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.Searcher;
+import org.apache.lucene.search.*;
import org.apache.regexp.RE;
import org.apache.regexp.RESyntaxException;
import org.jahia.data.fields.FieldTypes;
@@ -95,10 +92,16 @@
if (reader == null || jSearcher == null || jSearcher.getQuery () ==
null)
return result;
+ Searchable ramSearchable = null;
try {
// instanciate the searcher with the site index.
Searcher searcher = new IndexSearcher (reader);
+ RAMIndexer ramIndexer =
ServicesRegistry.getInstance().getJahiaSearchService().getRAMIndexer();
+ if ( ramIndexer != null ){
+ ramSearchable = ramIndexer.getSearcher(jParams.getSiteID());
+ }
+
String formattedSearchQuery = getFormattedSearchQuery
(jSearcher, jParams);
// instanciate the query
@@ -107,7 +110,13 @@
analyzer);
// get the search result.
- Hits hits = searcher.search (query);
+ Hits hits = null;
+ if ( ramSearchable == null ){
+ hits = searcher.search (query);
+ } else {
+ MultiSearcher multiSearcher = new MultiSearcher(new
Searchable[]{searcher,ramSearchable});
+ hits = multiSearcher.search(query);
+ }
Vector parsedObjects = getParsedObjects(hits);
if ( parsedObjects == null ){
@@ -117,6 +126,13 @@
} catch (Throwable t) {
logger.error (t);
+ } finally {
+ if ( ramSearchable != null ){
+ try {
+ ramSearchable.close();
+ } catch ( Throwable t){
+ }
+ }
}
return result;
}
@@ -144,6 +160,7 @@
return result;
StringBuffer buff = new StringBuffer (1024);
+ Searchable ramSearchable = null;
try {
ContainerSearcher cSearcher = (ContainerSearcher) jSearcher;
@@ -207,8 +224,20 @@
JahiaSearchConstant.FIELD_VALUE,
this.analyzer);
+ RAMIndexer ramIndexer =
ServicesRegistry.getInstance().getJahiaSearchService().getRAMIndexer();
+ if ( ramIndexer != null ){
+ ramSearchable = ramIndexer.getSearcher(jParams.getSiteID());
+ }
+
// get the search result.
- Hits hits = searcher.search (query);
+ Hits hits = null;
+ if ( ramSearchable == null ){
+ hits = searcher.search (query);
+ } else {
+ MultiSearcher multiSearcher = new MultiSearcher(new
Searchable[]{searcher,ramSearchable});
+ hits = multiSearcher.search(query);
+ }
+
if (hits == null || hits.length () == 0)
return result;
@@ -226,6 +255,12 @@
logger.error (t);
} finally {
buff = null;
+ if ( ramSearchable != null ){
+ try {
+ ramSearchable.close();
+ } catch ( Throwable t){
+ }
+ }
}
return result;
}