|
 |
10f0d1 |
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java
|
|
 |
10f0d1 |
index 4e6786c..49dc51b 100644
|
|
 |
10f0d1 |
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java
|
|
 |
10f0d1 |
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java
|
|
 |
10f0d1 |
@@ -10,10 +10,14 @@
|
|
 |
10f0d1 |
*******************************************************************************/
|
|
 |
10f0d1 |
package org.eclipse.help.internal.search;
|
|
 |
10f0d1 |
import java.io.*;
|
|
 |
10f0d1 |
-import java.util.HashSet;
|
|
 |
10f0d1 |
-import java.util.Set;
|
|
 |
10f0d1 |
+import java.util.ArrayList;
|
|
 |
10f0d1 |
+import java.util.List;
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
import org.apache.lucene.analysis.*;
|
|
 |
10f0d1 |
+import org.apache.lucene.analysis.en.*;
|
|
 |
10f0d1 |
+import org.apache.lucene.analysis.core.*;
|
|
 |
10f0d1 |
+import org.apache.lucene.analysis.util.*;
|
|
 |
10f0d1 |
+import org.apache.lucene.util.Version;
|
|
 |
10f0d1 |
/**
|
|
 |
10f0d1 |
* Lucene Analyzer for English. LowerCaseTokenizer->StopFilter->PorterStemFilter
|
|
 |
10f0d1 |
*/
|
|
 |
10f0d1 |
@@ -25,18 +29,22 @@ public final class Analyzer_en extends Analyzer {
|
|
 |
10f0d1 |
super();
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
/**
|
|
 |
10f0d1 |
- * Creates a TokenStream which tokenizes all the text in the provided
|
|
 |
10f0d1 |
+ * Creates a TokenStreamComponents which tokenizes all the text in the provided
|
|
 |
10f0d1 |
* Reader.
|
|
 |
10f0d1 |
*/
|
|
 |
10f0d1 |
- public final TokenStream tokenStream(String fieldName, Reader reader) {
|
|
 |
10f0d1 |
- return new PorterStemFilter(new StopFilter(false, new LowerCaseAndDigitsTokenizer(reader), getStopWords(), false));
|
|
 |
10f0d1 |
+ @Override
|
|
 |
10f0d1 |
+ public final TokenStreamComponents createComponents(String fieldName, Reader reader) {
|
|
 |
10f0d1 |
+ CharArraySet stopWordsSet = StopFilter.makeStopSet(Version.LUCENE_47, getStopWords(), true);
|
|
 |
10f0d1 |
+ Tokenizer source = new LowerCaseAndDigitsTokenizer(reader);
|
|
 |
10f0d1 |
+ TokenStream filter = new PorterStemFilter(new StopFilter(Version.LUCENE_47, source, stopWordsSet));
|
|
 |
10f0d1 |
+ return new TokenStreamComponents(source, filter);
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
- private Set<String> stopWords;
|
|
 |
10f0d1 |
+ private List<String> stopWords;
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
- private Set<String> getStopWords() {
|
|
 |
10f0d1 |
+ private List<String> getStopWords() {
|
|
 |
10f0d1 |
if ( stopWords == null ) {
|
|
 |
10f0d1 |
- stopWords = new HashSet<String>();
|
|
 |
10f0d1 |
+ stopWords = new ArrayList<String>();
|
|
 |
10f0d1 |
for (int i = 0; i < STOP_WORDS.length; i++) {
|
|
 |
10f0d1 |
stopWords.add(STOP_WORDS[i]);
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/DefaultAnalyzer.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/DefaultAnalyzer.java
|
|
 |
10f0d1 |
index 50258d2..f72615f 100644
|
|
 |
10f0d1 |
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/DefaultAnalyzer.java
|
|
 |
10f0d1 |
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/DefaultAnalyzer.java
|
|
 |
10f0d1 |
@@ -15,8 +15,10 @@ import java.util.StringTokenizer;
|
|
 |
10f0d1 |
import com.ibm.icu.text.BreakIterator;
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
import org.apache.lucene.analysis.Analyzer;
|
|
 |
10f0d1 |
-import org.apache.lucene.analysis.LowerCaseFilter;
|
|
 |
10f0d1 |
+import org.apache.lucene.analysis.core.LowerCaseFilter;
|
|
 |
10f0d1 |
+import org.apache.lucene.analysis.Tokenizer;
|
|
 |
10f0d1 |
import org.apache.lucene.analysis.TokenStream;
|
|
 |
10f0d1 |
+import org.apache.lucene.util.Version;
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
import org.eclipse.help.internal.base.HelpBasePlugin;
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
@@ -82,11 +84,14 @@ public final class DefaultAnalyzer extends Analyzer {
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
/**
|
|
 |
10f0d1 |
- * Creates a TokenStream which tokenizes all the text in the provided
|
|
 |
10f0d1 |
+ * Creates a TokenStreamComponents which tokenizes all the text in the provided
|
|
 |
10f0d1 |
* Reader.
|
|
 |
10f0d1 |
*/
|
|
 |
10f0d1 |
- public final TokenStream tokenStream(String fieldName, Reader reader) {
|
|
 |
10f0d1 |
- return new LowerCaseFilter(new WordTokenStream(fieldName, reader, locale));
|
|
 |
10f0d1 |
+ @Override
|
|
 |
10f0d1 |
+ public final TokenStreamComponents createComponents(String fieldName, Reader reader) {
|
|
 |
10f0d1 |
+ Tokenizer source = new WordTokenStream(fieldName, reader, locale);
|
|
 |
10f0d1 |
+ LowerCaseFilter filter = new LowerCaseFilter(Version.LUCENE_47, source);
|
|
 |
10f0d1 |
+ return new TokenStreamComponents(source, filter);
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
/**
|
|
 |
10f0d1 |
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/LowerCaseAndDigitsTokenizer.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/LowerCaseAndDigitsTokenizer.java
|
|
 |
10f0d1 |
index 0dd3943..d101ae9 100644
|
|
 |
10f0d1 |
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/LowerCaseAndDigitsTokenizer.java
|
|
 |
10f0d1 |
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/LowerCaseAndDigitsTokenizer.java
|
|
 |
10f0d1 |
@@ -12,7 +12,8 @@ package org.eclipse.help.internal.search;
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
import java.io.*;
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
-import org.apache.lucene.analysis.*;
|
|
 |
10f0d1 |
+import org.apache.lucene.analysis.util.*;
|
|
 |
10f0d1 |
+import org.apache.lucene.util.Version;
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
/**
|
|
 |
10f0d1 |
* Tokenizer breaking words around letters or digits.
|
|
 |
10f0d1 |
@@ -20,13 +21,14 @@ import org.apache.lucene.analysis.*;
|
|
 |
10f0d1 |
public class LowerCaseAndDigitsTokenizer extends CharTokenizer {
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
public LowerCaseAndDigitsTokenizer(Reader input) {
|
|
 |
10f0d1 |
- super(input);
|
|
 |
10f0d1 |
+ super(Version.LUCENE_47, input);
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
protected char normalize(char c) {
|
|
 |
10f0d1 |
return Character.toLowerCase(c);
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
- protected boolean isTokenChar(char c) {
|
|
 |
10f0d1 |
+ @Override
|
|
 |
10f0d1 |
+ public boolean isTokenChar(int c) {
|
|
 |
10f0d1 |
return Character.isLetterOrDigit(c);
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java
|
|
 |
10f0d1 |
index 00c2799..9f9962d 100644
|
|
 |
10f0d1 |
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java
|
|
 |
10f0d1 |
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java
|
|
 |
10f0d1 |
@@ -243,16 +243,24 @@ public class QueryBuilder {
|
|
 |
10f0d1 |
private List<String> analyzeText(Analyzer analyzer, String fieldName, String text) {
|
|
 |
10f0d1 |
List<String> words = new ArrayList<String>(1);
|
|
 |
10f0d1 |
Reader reader = new StringReader(text);
|
|
 |
10f0d1 |
- TokenStream tStream = analyzer.tokenStream(fieldName, reader);
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
- CharTermAttribute termAttribute = (CharTermAttribute) tStream.getAttribute(CharTermAttribute.class);
|
|
 |
10f0d1 |
+ TokenStream tStream = null;
|
|
 |
10f0d1 |
try {
|
|
 |
10f0d1 |
+ tStream = analyzer.tokenStream(fieldName, reader);
|
|
 |
10f0d1 |
+ tStream.reset();
|
|
 |
10f0d1 |
+ CharTermAttribute termAttribute = (CharTermAttribute) tStream.getAttribute(CharTermAttribute.class);
|
|
 |
10f0d1 |
while (tStream.incrementToken()) {
|
|
 |
10f0d1 |
String term = termAttribute.toString();
|
|
 |
10f0d1 |
words.add(term);
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
- reader.close();
|
|
 |
10f0d1 |
} catch (IOException ioe) {
|
|
 |
10f0d1 |
+ } finally {
|
|
 |
10f0d1 |
+ if (tStream != null) {
|
|
 |
10f0d1 |
+ try {
|
|
 |
10f0d1 |
+ tStream.close();
|
|
 |
10f0d1 |
+ } catch (IOException e) {
|
|
 |
10f0d1 |
+ }
|
|
 |
10f0d1 |
+ }
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
return words;
|
|
 |
10f0d1 |
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
|
|
 |
10f0d1 |
index e860c8d..0d5a8b6 100644
|
|
 |
10f0d1 |
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
|
|
 |
10f0d1 |
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
|
|
 |
10f0d1 |
@@ -31,13 +31,20 @@ import java.util.Set;
|
|
 |
10f0d1 |
import java.util.zip.ZipEntry;
|
|
 |
10f0d1 |
import java.util.zip.ZipInputStream;
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
+import org.apache.lucene.analysis.Analyzer;
|
|
 |
10f0d1 |
+import org.apache.lucene.analysis.miscellaneous.LimitTokenCountAnalyzer;
|
|
 |
10f0d1 |
import org.apache.lucene.document.Document;
|
|
 |
10f0d1 |
import org.apache.lucene.document.Field;
|
|
 |
10f0d1 |
+import org.apache.lucene.index.AtomicReader;
|
|
 |
10f0d1 |
+import org.apache.lucene.index.DirectoryReader;
|
|
 |
10f0d1 |
+import org.apache.lucene.index.DocsEnum;
|
|
 |
10f0d1 |
import org.apache.lucene.index.IndexReader;
|
|
 |
10f0d1 |
import org.apache.lucene.index.IndexWriter;
|
|
 |
10f0d1 |
+import org.apache.lucene.index.IndexWriterConfig;
|
|
 |
10f0d1 |
+import org.apache.lucene.index.IndexWriterConfig.OpenMode;
|
|
 |
10f0d1 |
+import org.apache.lucene.index.LogDocMergePolicy;
|
|
 |
10f0d1 |
+import org.apache.lucene.index.SlowCompositeReaderWrapper;
|
|
 |
10f0d1 |
import org.apache.lucene.index.Term;
|
|
 |
10f0d1 |
-import org.apache.lucene.index.TermDocs;
|
|
 |
10f0d1 |
-import org.apache.lucene.index.IndexWriter.MaxFieldLength;
|
|
 |
10f0d1 |
import org.apache.lucene.search.BooleanQuery;
|
|
 |
10f0d1 |
import org.apache.lucene.search.IndexSearcher;
|
|
 |
10f0d1 |
import org.apache.lucene.search.Query;
|
|
 |
10f0d1 |
@@ -265,10 +272,10 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
if (iw != null) {
|
|
 |
10f0d1 |
iw.close();
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
- boolean create = false;
|
|
 |
10f0d1 |
+ OpenMode create = OpenMode.APPEND;
|
|
 |
10f0d1 |
if (!indexDir.exists() || !isLuceneCompatible() || !isAnalyzerCompatible()
|
|
 |
10f0d1 |
|| inconsistencyFile.exists() && firstOperation) {
|
|
 |
10f0d1 |
- create = true;
|
|
 |
10f0d1 |
+ create = OpenMode.CREATE;
|
|
 |
10f0d1 |
indexDir.mkdirs();
|
|
 |
10f0d1 |
if (!indexDir.exists())
|
|
 |
10f0d1 |
return false; // unable to setup index directory
|
|
 |
10f0d1 |
@@ -276,9 +283,13 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
indexedDocs = new HelpProperties(INDEXED_DOCS_FILE, indexDir);
|
|
 |
10f0d1 |
indexedDocs.restore();
|
|
 |
10f0d1 |
setInconsistent(true);
|
|
 |
10f0d1 |
- MaxFieldLength max = new MaxFieldLength(1000000);
|
|
 |
10f0d1 |
- iw = new IndexWriter(luceneDirectory, analyzerDescriptor.getAnalyzer(), create, max);
|
|
 |
10f0d1 |
- iw.setMergeFactor(20);
|
|
 |
10f0d1 |
+ Analyzer wrapper = new LimitTokenCountAnalyzer(analyzerDescriptor.getAnalyzer(), 1000000);
|
|
 |
10f0d1 |
+ IndexWriterConfig iconfig = new IndexWriterConfig(org.apache.lucene.util.Version.LUCENE_47, wrapper);
|
|
 |
10f0d1 |
+ iconfig.setOpenMode(create);
|
|
 |
10f0d1 |
+ LogDocMergePolicy policy = new LogDocMergePolicy();
|
|
 |
10f0d1 |
+ policy.setMergeFactor(20);
|
|
 |
10f0d1 |
+ iconfig.setMergePolicy(policy);
|
|
 |
10f0d1 |
+ iw = new IndexWriter(luceneDirectory, iconfig);
|
|
 |
10f0d1 |
return true;
|
|
 |
10f0d1 |
} catch (IOException e) {
|
|
 |
10f0d1 |
HelpBasePlugin.logError("Exception occurred in search indexing at beginAddBatch.", e); //$NON-NLS-1$
|
|
 |
10f0d1 |
@@ -297,7 +308,7 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
indexedDocs = new HelpProperties(INDEXED_DOCS_FILE, indexDir);
|
|
 |
10f0d1 |
indexedDocs.restore();
|
|
 |
10f0d1 |
setInconsistent(true);
|
|
 |
10f0d1 |
- ir = IndexReader.open(luceneDirectory, false);
|
|
 |
10f0d1 |
+ ir = DirectoryReader.open(luceneDirectory);
|
|
 |
10f0d1 |
return true;
|
|
 |
10f0d1 |
} catch (IOException e) {
|
|
 |
10f0d1 |
HelpBasePlugin.logError("Exception occurred in search indexing at beginDeleteBatch.", e); //$NON-NLS-1$
|
|
 |
10f0d1 |
@@ -313,7 +324,7 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
if (ir != null) {
|
|
 |
10f0d1 |
ir.close();
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
- ir = IndexReader.open(luceneDirectory, false);
|
|
 |
10f0d1 |
+ ir = DirectoryReader.open(luceneDirectory);
|
|
 |
10f0d1 |
return true;
|
|
 |
10f0d1 |
} catch (IOException e) {
|
|
 |
10f0d1 |
HelpBasePlugin.logError("Exception occurred in search indexing at beginDeleteBatch.", e); //$NON-NLS-1$
|
|
 |
10f0d1 |
@@ -331,7 +342,7 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
public IStatus removeDocument(String name) {
|
|
 |
10f0d1 |
Term term = new Term(FIELD_NAME, name);
|
|
 |
10f0d1 |
try {
|
|
 |
10f0d1 |
- ir.deleteDocuments(term);
|
|
 |
10f0d1 |
+ iw.deleteDocuments(term);
|
|
 |
10f0d1 |
indexedDocs.remove(name);
|
|
 |
10f0d1 |
} catch (IOException e) {
|
|
 |
10f0d1 |
return new Status(IStatus.ERROR, HelpBasePlugin.PLUGIN_ID, IStatus.ERROR,
|
|
 |
10f0d1 |
@@ -350,7 +361,7 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
if (iw == null)
|
|
 |
10f0d1 |
return false;
|
|
 |
10f0d1 |
if (optimize)
|
|
 |
10f0d1 |
- iw.optimize();
|
|
 |
10f0d1 |
+ iw.forceMerge(1);
|
|
 |
10f0d1 |
iw.close();
|
|
 |
10f0d1 |
iw = null;
|
|
 |
10f0d1 |
// save the update info:
|
|
 |
10f0d1 |
@@ -369,7 +380,7 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
* know about this change. Close it so that it gets reloaded next search.
|
|
 |
10f0d1 |
*/
|
|
 |
10f0d1 |
if (searcher != null) {
|
|
 |
10f0d1 |
- searcher.close();
|
|
 |
10f0d1 |
+ searcher.getIndexReader().close();
|
|
 |
10f0d1 |
searcher = null;
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
return true;
|
|
 |
10f0d1 |
@@ -401,7 +412,7 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
* know about this change. Close it so that it gets reloaded next search.
|
|
 |
10f0d1 |
*/
|
|
 |
10f0d1 |
if (searcher != null) {
|
|
 |
10f0d1 |
- searcher.close();
|
|
 |
10f0d1 |
+ searcher.getIndexReader().close();
|
|
 |
10f0d1 |
searcher = null;
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
return true;
|
|
 |
10f0d1 |
@@ -505,8 +516,8 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
Directory[] luceneDirs = dirList.toArray(new Directory[dirList.size()]);
|
|
 |
10f0d1 |
try {
|
|
 |
10f0d1 |
- iw.addIndexesNoOptimize(luceneDirs);
|
|
 |
10f0d1 |
- iw.optimize();
|
|
 |
10f0d1 |
+ iw.addIndexes(luceneDirs);
|
|
 |
10f0d1 |
+ iw.forceMerge(1);
|
|
 |
10f0d1 |
} catch (IOException ioe) {
|
|
 |
10f0d1 |
HelpBasePlugin.logError("Merging search indexes failed.", ioe); //$NON-NLS-1$
|
|
 |
10f0d1 |
return new HashMap<String, String[]>();
|
|
 |
10f0d1 |
@@ -515,18 +526,19 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
public IStatus removeDuplicates(String name, String[] index_paths) {
|
|
 |
10f0d1 |
- TermDocs hrefDocs = null;
|
|
 |
10f0d1 |
- TermDocs indexDocs = null;
|
|
 |
10f0d1 |
- Term hrefTerm = new Term(FIELD_NAME, name);
|
|
 |
10f0d1 |
try {
|
|
 |
10f0d1 |
+ AtomicReader ar = SlowCompositeReaderWrapper.wrap(ir);
|
|
 |
10f0d1 |
+ DocsEnum hrefDocs = null;
|
|
 |
10f0d1 |
+ DocsEnum indexDocs = null;
|
|
 |
10f0d1 |
+ Term hrefTerm = new Term(FIELD_NAME, name);
|
|
 |
10f0d1 |
for (int i = 0; i < index_paths.length; i++) {
|
|
 |
10f0d1 |
Term indexTerm = new Term(FIELD_INDEX_ID, index_paths[i]);
|
|
 |
10f0d1 |
if (i == 0) {
|
|
 |
10f0d1 |
- hrefDocs = ir.termDocs(hrefTerm);
|
|
 |
10f0d1 |
- indexDocs = ir.termDocs(indexTerm);
|
|
 |
10f0d1 |
+ hrefDocs = ar.termDocsEnum(hrefTerm);
|
|
 |
10f0d1 |
+ indexDocs = ar.termDocsEnum(indexTerm);
|
|
 |
10f0d1 |
} else {
|
|
 |
10f0d1 |
- hrefDocs.seek(hrefTerm);
|
|
 |
10f0d1 |
- indexDocs.seek(indexTerm);
|
|
 |
10f0d1 |
+ hrefDocs = ar.termDocsEnum(hrefTerm);
|
|
 |
10f0d1 |
+ indexDocs = ar.termDocsEnum(indexTerm);
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
removeDocuments(hrefDocs, indexDocs);
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
@@ -535,19 +547,6 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
"IO exception occurred while removing duplicates of document " + name //$NON-NLS-1$
|
|
 |
10f0d1 |
+ " from index " + indexDir.getAbsolutePath() + ".", //$NON-NLS-1$ //$NON-NLS-2$
|
|
 |
10f0d1 |
ioe);
|
|
 |
10f0d1 |
- } finally {
|
|
 |
10f0d1 |
- if (hrefDocs != null) {
|
|
 |
10f0d1 |
- try {
|
|
 |
10f0d1 |
- hrefDocs.close();
|
|
 |
10f0d1 |
- } catch (IOException e) {
|
|
 |
10f0d1 |
- }
|
|
 |
10f0d1 |
- }
|
|
 |
10f0d1 |
- if (indexDocs != null) {
|
|
 |
10f0d1 |
- try {
|
|
 |
10f0d1 |
- indexDocs.close();
|
|
 |
10f0d1 |
- } catch (IOException e) {
|
|
 |
10f0d1 |
- }
|
|
 |
10f0d1 |
- }
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
return Status.OK_STATUS;
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
@@ -559,33 +558,33 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
* @param docs2
|
|
 |
10f0d1 |
* @throws IOException
|
|
 |
10f0d1 |
*/
|
|
 |
10f0d1 |
- private void removeDocuments(TermDocs doc1, TermDocs docs2) throws IOException {
|
|
 |
10f0d1 |
- if (!doc1.next()) {
|
|
 |
10f0d1 |
+ private void removeDocuments(DocsEnum doc1, DocsEnum docs2) throws IOException {
|
|
 |
10f0d1 |
+ if (doc1.nextDoc() == DocsEnum.NO_MORE_DOCS) {
|
|
 |
10f0d1 |
return;
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
- if (!docs2.next()) {
|
|
 |
10f0d1 |
+ if (docs2.nextDoc() == DocsEnum.NO_MORE_DOCS) {
|
|
 |
10f0d1 |
return;
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
while (true) {
|
|
 |
10f0d1 |
- if (doc1.doc() < docs2.doc()) {
|
|
 |
10f0d1 |
- if (!doc1.skipTo(docs2.doc())) {
|
|
 |
10f0d1 |
- if (!doc1.next()) {
|
|
 |
10f0d1 |
+ if (doc1.docID() < docs2.docID()) {
|
|
 |
10f0d1 |
+ if (doc1.advance(docs2.docID()) == DocsEnum.NO_MORE_DOCS) {
|
|
 |
10f0d1 |
+ if (doc1.nextDoc() == DocsEnum.NO_MORE_DOCS) {
|
|
 |
10f0d1 |
return;
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
- } else if (doc1.doc() > docs2.doc()) {
|
|
 |
10f0d1 |
- if (!docs2.skipTo(doc1.doc())) {
|
|
 |
10f0d1 |
- if (!doc1.next()) {
|
|
 |
10f0d1 |
+ } else if (doc1.docID() > docs2.docID()) {
|
|
 |
10f0d1 |
+ if (docs2.advance(doc1.docID()) == DocsEnum.NO_MORE_DOCS) {
|
|
 |
10f0d1 |
+ if (doc1.nextDoc() == DocsEnum.NO_MORE_DOCS) {
|
|
 |
10f0d1 |
return;
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
- if (doc1.doc() == docs2.doc()) {
|
|
 |
10f0d1 |
- ir.deleteDocument(doc1.doc());
|
|
 |
10f0d1 |
- if (!doc1.next()) {
|
|
 |
10f0d1 |
+ if (doc1.docID() == docs2.docID()) {
|
|
 |
10f0d1 |
+ iw.tryDeleteDocument(ir, doc1.docID());
|
|
 |
10f0d1 |
+ if (doc1.nextDoc() == DocsEnum.NO_MORE_DOCS) {
|
|
 |
10f0d1 |
return;
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
- if (!docs2.next()) {
|
|
 |
10f0d1 |
+ if (docs2.nextDoc() == DocsEnum.NO_MORE_DOCS) {
|
|
 |
10f0d1 |
return;
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
@@ -792,7 +791,7 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
public void openSearcher() throws IOException {
|
|
 |
10f0d1 |
synchronized (searcherCreateLock) {
|
|
 |
10f0d1 |
if (searcher == null) {
|
|
 |
10f0d1 |
- searcher = new IndexSearcher(luceneDirectory, false);
|
|
 |
10f0d1 |
+ searcher = new IndexSearcher(DirectoryReader.open(luceneDirectory));
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
@@ -814,7 +813,7 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
if (searches.isEmpty()) {
|
|
 |
10f0d1 |
if (searcher != null) {
|
|
 |
10f0d1 |
try {
|
|
 |
10f0d1 |
- searcher.close();
|
|
 |
10f0d1 |
+ searcher.getIndexReader().close();
|
|
 |
10f0d1 |
} catch (IOException ioe) {
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
@@ -888,9 +887,11 @@ public class SearchIndex implements IHelpSearchIndex {
|
|
 |
10f0d1 |
*/
|
|
 |
10f0d1 |
private void cleanOldIndex() {
|
|
 |
10f0d1 |
IndexWriter cleaner = null;
|
|
 |
10f0d1 |
- MaxFieldLength max = new MaxFieldLength(10000);
|
|
 |
10f0d1 |
try {
|
|
 |
10f0d1 |
- cleaner = new IndexWriter(luceneDirectory, analyzerDescriptor.getAnalyzer(), true, max);
|
|
 |
10f0d1 |
+ Analyzer wrapper = new LimitTokenCountAnalyzer(analyzerDescriptor.getAnalyzer(), 10000);
|
|
 |
10f0d1 |
+ IndexWriterConfig iconfig = new IndexWriterConfig(org.apache.lucene.util.Version.LUCENE_47, wrapper);
|
|
 |
10f0d1 |
+ iconfig.setOpenMode(OpenMode.CREATE);
|
|
 |
10f0d1 |
+ cleaner = new IndexWriter(luceneDirectory, iconfig);
|
|
 |
10f0d1 |
} catch (IOException ioe) {
|
|
 |
10f0d1 |
} finally {
|
|
 |
10f0d1 |
try {
|
|
 |
10f0d1 |
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SmartAnalyzer.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SmartAnalyzer.java
|
|
 |
10f0d1 |
index d0a7bb7..df31d89 100644
|
|
 |
10f0d1 |
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SmartAnalyzer.java
|
|
 |
10f0d1 |
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SmartAnalyzer.java
|
|
 |
10f0d1 |
@@ -18,7 +18,7 @@ import org.apache.lucene.analysis.*;
|
|
 |
10f0d1 |
* Smart Analyzer. Chooses underlying implementation based on the field which
|
|
 |
10f0d1 |
* text is analyzed.
|
|
 |
10f0d1 |
*/
|
|
 |
10f0d1 |
-public final class SmartAnalyzer extends Analyzer {
|
|
 |
10f0d1 |
+public final class SmartAnalyzer extends AnalyzerWrapper {
|
|
 |
10f0d1 |
Analyzer pluggedInAnalyzer;
|
|
 |
10f0d1 |
Analyzer exactAnalyzer;
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
@@ -31,14 +31,14 @@ public final class SmartAnalyzer extends Analyzer {
|
|
 |
10f0d1 |
this.exactAnalyzer = new DefaultAnalyzer(locale);
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
/**
|
|
 |
10f0d1 |
- * Creates a TokenStream which tokenizes all the text in the provided
|
|
 |
10f0d1 |
- * Reader. Delegates to DefaultAnalyzer when field used to search for exact
|
|
 |
10f0d1 |
+ * Delegates to DefaultAnalyzer when field used to search for exact
|
|
 |
10f0d1 |
* match, and to plugged-in analyzer for other fields.
|
|
 |
10f0d1 |
*/
|
|
 |
10f0d1 |
- public final TokenStream tokenStream(String fieldName, Reader reader) {
|
|
 |
10f0d1 |
+ @Override
|
|
 |
10f0d1 |
+ public final Analyzer getWrappedAnalyzer(String fieldName) {
|
|
 |
10f0d1 |
if (fieldName != null && fieldName.startsWith("exact_")) { //$NON-NLS-1$
|
|
 |
10f0d1 |
- return exactAnalyzer.tokenStream(fieldName, reader);
|
|
 |
10f0d1 |
+ return exactAnalyzer;
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
- return pluggedInAnalyzer.tokenStream(fieldName, reader);
|
|
 |
10f0d1 |
+ return pluggedInAnalyzer;
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/WordTokenStream.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/WordTokenStream.java
|
|
 |
10f0d1 |
index 1360599..f622417 100644
|
|
 |
10f0d1 |
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/WordTokenStream.java
|
|
 |
10f0d1 |
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/WordTokenStream.java
|
|
 |
10f0d1 |
@@ -35,6 +35,7 @@ public final class WordTokenStream extends Tokenizer {
|
|
 |
10f0d1 |
* Constructor
|
|
 |
10f0d1 |
*/
|
|
 |
10f0d1 |
public WordTokenStream(String fieldName, Reader reader, Locale locale) {
|
|
 |
10f0d1 |
+ super(reader);
|
|
 |
10f0d1 |
this.reader = reader;
|
|
 |
10f0d1 |
boundary = BreakIterator.getWordInstance(locale);
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
@@ -105,6 +106,7 @@ public final class WordTokenStream extends Tokenizer {
|
|
 |
10f0d1 |
}
|
|
 |
10f0d1 |
|
|
 |
10f0d1 |
public void close() throws IOException {
|
|
 |
10f0d1 |
+ super.close();
|
|
 |
10f0d1 |
/// Unlikely to be called as this is a reused
|
|
 |
10f0d1 |
if (this.reader != null) {
|
|
 |
10f0d1 |
this.reader.close();
|