You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2013/07/15 22:29:33 UTC
svn commit: r1503458 - in /lucene/dev/trunk/lucene/suggest/src:
java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java
test/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggesterTest.java
Author: mikemccand
Date: Mon Jul 15 20:29:32 2013
New Revision: 1503458
URL: http://svn.apache.org/r1503458
Log:
LUCENE-4845: close tmp directory; fix test to catch un-closed files; add missing suggester.close()
Modified:
lucene/dev/trunk/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java
lucene/dev/trunk/lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggesterTest.java
Modified: lucene/dev/trunk/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java?rev=1503458&r1=1503457&r2=1503458&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java (original)
+++ lucene/dev/trunk/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java Mon Jul 15 20:29:32 2013
@@ -100,10 +100,10 @@ public class AnalyzingInfixSuggester ext
private final Analyzer queryAnalyzer;
private final Analyzer indexAnalyzer;
- private final Directory dir;
private final Version matchVersion;
private final File indexPath;
private final int minPrefixChars;
+ private Directory dir;
/** {@link IndexSearcher} used for lookups. */
protected IndexSearcher searcher;
@@ -143,7 +143,7 @@ public class AnalyzingInfixSuggester ext
this.matchVersion = matchVersion;
this.indexPath = indexPath;
this.minPrefixChars = minPrefixChars;
- dir = FSDirectory.open(indexPath);
+ dir = getDirectory(indexPath);
if (DirectoryReader.indexExists(dir)) {
// Already built; open it:
@@ -166,43 +166,54 @@ public class AnalyzingInfixSuggester ext
return iwc;
}
+ /** Subclass can override to choose a specific {@link
+ * Directory} implementation. */
+ protected Directory getDirectory(File path) throws IOException {
+ return FSDirectory.open(path);
+ }
+
@Override
public void build(TermFreqIterator iter) throws IOException {
+ if (searcher != null) {
+ searcher.getIndexReader().close();
+ searcher = null;
+ }
+
TermFreqPayloadIterator payloads;
if (iter instanceof TermFreqPayloadIterator) {
payloads = (TermFreqPayloadIterator) iter;
} else {
payloads = null;
}
- Directory dirTmp = FSDirectory.open(new File(indexPath.toString() + ".tmp"));
+ Directory dirTmp = getDirectory(new File(indexPath.toString() + ".tmp"));
- Analyzer gramAnalyzer = new AnalyzerWrapper() {
- @Override
- protected Analyzer getWrappedAnalyzer(String fieldName) {
- return indexAnalyzer;
- }
-
- @Override
- protected TokenStreamComponents wrapComponents(String fieldName, TokenStreamComponents components) {
- if (fieldName.equals("textgrams") && minPrefixChars > 0) {
- return new TokenStreamComponents(components.getTokenizer(),
- new EdgeNGramTokenFilter(matchVersion,
- components.getTokenStream(),
- 1, minPrefixChars));
- } else {
- return components;
- }
- }
- };
-
- IndexWriter w = new IndexWriter(dirTmp,
- getIndexWriterConfig(matchVersion, gramAnalyzer));
+ IndexWriter w = null;
IndexWriter w2 = null;
AtomicReader r = null;
boolean success = false;
try {
-
+ Analyzer gramAnalyzer = new AnalyzerWrapper() {
+ @Override
+ protected Analyzer getWrappedAnalyzer(String fieldName) {
+ return indexAnalyzer;
+ }
+
+ @Override
+ protected TokenStreamComponents wrapComponents(String fieldName, TokenStreamComponents components) {
+ if (fieldName.equals("textgrams") && minPrefixChars > 0) {
+ return new TokenStreamComponents(components.getTokenizer(),
+ new EdgeNGramTokenFilter(matchVersion,
+ components.getTokenStream(),
+ 1, minPrefixChars));
+ } else {
+ return components;
+ }
+ }
+ };
+
+ w = new IndexWriter(dirTmp,
+ getIndexWriterConfig(matchVersion, gramAnalyzer));
BytesRef text;
Document doc = new Document();
FieldType ft = new FieldType(TextField.TYPE_NOT_STORED);
@@ -298,9 +309,9 @@ public class AnalyzingInfixSuggester ext
success = true;
} finally {
if (success) {
- IOUtils.close(w, w2, r);
+ IOUtils.close(w, w2, r, dirTmp);
} else {
- IOUtils.closeWhileHandlingException(w, w2, r);
+ IOUtils.closeWhileHandlingException(w, w2, r, dirTmp);
}
}
}
@@ -327,6 +338,10 @@ public class AnalyzingInfixSuggester ext
* should be highlighted ({@code doHighlight}). */
public List<LookupResult> lookup(CharSequence key, int num, boolean allTermsRequired, boolean doHighlight) {
+ if (searcher == null) {
+ throw new IllegalStateException("suggester was not built");
+ }
+
final BooleanClause.Occur occur;
if (allTermsRequired) {
occur = BooleanClause.Occur.MUST;
@@ -563,7 +578,10 @@ public class AnalyzingInfixSuggester ext
if (searcher != null) {
searcher.getIndexReader().close();
searcher = null;
+ }
+ if (dir != null) {
dir.close();
+ dir = null;
}
}
};
Modified: lucene/dev/trunk/lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggesterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggesterTest.java?rev=1503458&r1=1503457&r2=1503458&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggesterTest.java (original)
+++ lucene/dev/trunk/lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggesterTest.java Mon Jul 15 20:29:32 2013
@@ -33,6 +33,7 @@ import org.apache.lucene.search.TermQuer
import org.apache.lucene.search.suggest.Lookup.LookupResult;
import org.apache.lucene.search.suggest.TermFreqPayload;
import org.apache.lucene.search.suggest.TermFreqPayloadArrayIterator;
+import org.apache.lucene.store.Directory;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
import org.apache.lucene.util.LuceneTestCase;
@@ -51,7 +52,12 @@ public class AnalyzingInfixSuggesterTest
File tempDir = _TestUtil.getTempDir("AnalyzingInfixSuggesterTest");
Analyzer a = new MockAnalyzer(random(), MockTokenizer.WHITESPACE, false);
- AnalyzingInfixSuggester suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, 3);
+ AnalyzingInfixSuggester suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, 3) {
+ @Override
+ protected Directory getDirectory(File path) {
+ return newDirectory();
+ }
+ };
suggester.build(new TermFreqPayloadArrayIterator(keys));
List<LookupResult> results = suggester.lookup(_TestUtil.stringToCharSequence("ear", random()), 10, true, true);
@@ -94,11 +100,21 @@ public class AnalyzingInfixSuggesterTest
File tempDir = _TestUtil.getTempDir("AnalyzingInfixSuggesterTest");
Analyzer a = new MockAnalyzer(random(), MockTokenizer.WHITESPACE, false);
- AnalyzingInfixSuggester suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, 3);
+ AnalyzingInfixSuggester suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, 3) {
+ @Override
+ protected Directory getDirectory(File path) {
+ return newFSDirectory(path);
+ }
+ };
suggester.build(new TermFreqPayloadArrayIterator(keys));
suggester.close();
- suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, 3);
+ suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, 3) {
+ @Override
+ protected Directory getDirectory(File path) {
+ return newFSDirectory(path);
+ }
+ };
List<LookupResult> results = suggester.lookup(_TestUtil.stringToCharSequence("ear", random()), 10, true, true);
assertEquals(2, results.size());
assertEquals("a penny saved is a penny <b>ear</b>ned", results.get(0).key);
@@ -117,7 +133,12 @@ public class AnalyzingInfixSuggesterTest
Analyzer a = new MockAnalyzer(random(), MockTokenizer.WHITESPACE, false);
int minPrefixLength = random().nextInt(10);
- AnalyzingInfixSuggester suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, minPrefixLength);
+ AnalyzingInfixSuggester suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, minPrefixLength) {
+ @Override
+ protected Directory getDirectory(File path) {
+ return newFSDirectory(path);
+ }
+ };
suggester.build(new TermFreqPayloadArrayIterator(keys));
for(int i=0;i<2;i++) {
@@ -174,8 +195,14 @@ public class AnalyzingInfixSuggesterTest
// Make sure things still work after close and reopen:
suggester.close();
- suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, minPrefixLength);
+ suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, minPrefixLength) {
+ @Override
+ protected Directory getDirectory(File path) {
+ return newFSDirectory(path);
+ }
+ };
}
+ suggester.close();
}
public void testHighlight() throws Exception {
@@ -186,7 +213,12 @@ public class AnalyzingInfixSuggesterTest
File tempDir = _TestUtil.getTempDir("AnalyzingInfixSuggesterTest");
Analyzer a = new MockAnalyzer(random(), MockTokenizer.WHITESPACE, false);
- AnalyzingInfixSuggester suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, 3);
+ AnalyzingInfixSuggester suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, 3) {
+ @Override
+ protected Directory getDirectory(File path) {
+ return newDirectory();
+ }
+ };
suggester.build(new TermFreqPayloadArrayIterator(keys));
List<LookupResult> results = suggester.lookup(_TestUtil.stringToCharSequence("penn", random()), 10, true, true);
assertEquals(1, results.size());
@@ -202,7 +234,12 @@ public class AnalyzingInfixSuggesterTest
File tempDir = _TestUtil.getTempDir("AnalyzingInfixSuggesterTest");
Analyzer a = new MockAnalyzer(random(), MockTokenizer.WHITESPACE, true);
- AnalyzingInfixSuggester suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, 3);
+ AnalyzingInfixSuggester suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, 3) {
+ @Override
+ protected Directory getDirectory(File path) {
+ return newDirectory();
+ }
+ };
suggester.build(new TermFreqPayloadArrayIterator(keys));
List<LookupResult> results = suggester.lookup(_TestUtil.stringToCharSequence("penn", random()), 10, true, true);
assertEquals(1, results.size());
@@ -225,6 +262,11 @@ public class AnalyzingInfixSuggesterTest
sb.append("</b>");
}
}
+
+ @Override
+ protected Directory getDirectory(File path) {
+ return newDirectory();
+ }
};
suggester.build(new TermFreqPayloadArrayIterator(keys));
results = suggester.lookup(_TestUtil.stringToCharSequence("penn", random()), 10, true, true);
@@ -241,7 +283,12 @@ public class AnalyzingInfixSuggesterTest
File tempDir = _TestUtil.getTempDir("AnalyzingInfixSuggesterTest");
Analyzer a = new MockAnalyzer(random(), MockTokenizer.WHITESPACE, false);
- AnalyzingInfixSuggester suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, 3);
+ AnalyzingInfixSuggester suggester = new AnalyzingInfixSuggester(TEST_VERSION_CURRENT, tempDir, a, a, 3) {
+ @Override
+ protected Directory getDirectory(File path) {
+ return newDirectory();
+ }
+ };
suggester.build(new TermFreqPayloadArrayIterator(keys));
suggester.close();
suggester.close();
@@ -298,6 +345,11 @@ public class AnalyzingInfixSuggesterTest
return null;
}
}
+
+ @Override
+ protected Directory getDirectory(File path) {
+ return newDirectory();
+ }
};
suggester.build(new TermFreqPayloadArrayIterator(keys));