Author: sergiykarpenko
Date: 2011-07-13 10:57:01 -0400 (Wed, 13 Jul 2011)
New Revision: 4627
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/LuceneQueryHits.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java
Log:
EXOJCR-1436: IndexReader release added to LuceneQueryHits
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java 2011-07-13
14:54:22 UTC (rev 4626)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java 2011-07-13
14:57:01 UTC (rev 4627)
@@ -971,17 +971,17 @@
private Set<String> getNodes(final org.apache.lucene.search.Query query) throws
RepositoryException
{
Set<String> result = new HashSet<String>();
+ QueryHits hits = null;
try
{
- QueryHits hits = handler.executeQuery(query);
+ hits = handler.executeQuery(query);
ScoreNode sn;
-
while ((sn = hits.nextScoreNode()) != null)
{
- // Node node = session.getNodeById(sn.getNodeId());
result.add(sn.getNodeId());
}
+ return result;
}
catch (IndexOfflineIOException e)
{
@@ -991,7 +991,20 @@
{
throw new RepositoryException(e.getLocalizedMessage(), e);
}
- return result;
+ finally
+ {
+ if (hits != null)
+ {
+ try
+ {
+ hits.close();
+ }
+ catch (IOException e)
+ {
+ log.error("Can not close QueryHits.", e);
+ }
+ }
+ }
}
private boolean isPrefixMatch(final InternalQName value, final String prefix) throws
RepositoryException
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/LuceneQueryHits.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/LuceneQueryHits.java 2011-07-13
14:54:22 UTC (rev 4626)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/LuceneQueryHits.java 2011-07-13
14:57:01 UTC (rev 4627)
@@ -41,10 +41,31 @@
*/
private final Scorer scorer;
+ /**
+ * Release IndexReader on LuceneQueryHits.close().
+ */
+ private final boolean releaseReaderOnClose;
+
public LuceneQueryHits(IndexReader reader, IndexSearcher searcher, Query query) throws
IOException
{
+ this(reader, searcher, query, false);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param reader IndexReader
+ * @param searcher IndexSearcher
+ * @param query Query
+ * @param releaseReaderOnClose - release IndexReader on LuceneQueryHits.close().
+ * @throws IOException
+ */
+ public LuceneQueryHits(IndexReader reader, IndexSearcher searcher, Query query,
boolean releaseReaderOnClose)
+ throws IOException
+ {
this.reader = reader;
this.scorer = query.weight(searcher).scorer(reader, true, false);
+ this.releaseReaderOnClose = releaseReaderOnClose;
}
/**
@@ -66,8 +87,16 @@
*/
public void close() throws IOException
{
- // make sure scorer frees resources
- scorer.skipTo(Integer.MAX_VALUE);
+ if (scorer != null)
+ {
+ // make sure scorer frees resources
+ scorer.advance(Integer.MAX_VALUE);
+ }
+
+ if (releaseReaderOnClose && reader != null && reader instanceof
ReleaseableIndexReader)
+ {
+ ((ReleaseableIndexReader)reader).release();
+ }
}
/**
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java 2011-07-13
14:54:22 UTC (rev 4626)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java 2011-07-13
14:57:01 UTC (rev 4627)
@@ -3054,7 +3054,7 @@
IndexSearcher searcher = new IndexSearcher(reader);
searcher.setSimilarity(getSimilarity());
- return new LuceneQueryHits(reader, searcher, query);
+ return new LuceneQueryHits(reader, searcher, query, true);
}
/**
Show replies by date