Alexander Kurtakov 283abe4
From e9b5adb1d0477a50111afe5cf7736c542b7e4998 Mon Sep 17 00:00:00 2001
Alexander Kurtakov 283abe4
From: Sopot Cela <scela@redhat.com>
Alexander Kurtakov 283abe4
Date: Thu, 21 May 2015 13:48:41 +0200
Alexander Kurtakov 283abe4
Subject: [PATCH] Bug 466829 - Upgrade platform.ua to Lucene 5.1.0
Alexander Kurtakov 283abe4
Alexander Kurtakov 283abe4
Change-Id: I882188205c2c1e2cc1106108680dd4e94570a975
Alexander Kurtakov 283abe4
Signed-off-by: Sopot Cela <scela@redhat.com>
Alexander Kurtakov 283abe4
---
Alexander Kurtakov 283abe4
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.help.base/.settings/org.eclipse.jdt.core.prefs
Alexander Kurtakov 283abe4
index 34d2b77..07713d8 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/.settings/org.eclipse.jdt.core.prefs
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.help.base/.settings/org.eclipse.jdt.core.prefs
Alexander Kurtakov 283abe4
@@ -7,9 +7,9 @@
Alexander Kurtakov 283abe4
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
Alexander Kurtakov 283abe4
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
Alexander Kurtakov 283abe4
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
Alexander Kurtakov 283abe4
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
Alexander Kurtakov 283abe4
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
Alexander Kurtakov 283abe4
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
Alexander Kurtakov 283abe4
-org.eclipse.jdt.core.compiler.compliance=1.5
Alexander Kurtakov 283abe4
+org.eclipse.jdt.core.compiler.compliance=1.7
Alexander Kurtakov 283abe4
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
Alexander Kurtakov 283abe4
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
Alexander Kurtakov 283abe4
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
Alexander Kurtakov 283abe4
@@ -98,7 +98,7 @@
Alexander Kurtakov 283abe4
 org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
Alexander Kurtakov 283abe4
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
Alexander Kurtakov 283abe4
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
Alexander Kurtakov 283abe4
-org.eclipse.jdt.core.compiler.source=1.5
Alexander Kurtakov 283abe4
+org.eclipse.jdt.core.compiler.source=1.7
Alexander Kurtakov 283abe4
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
Alexander Kurtakov 283abe4
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
Alexander Kurtakov 283abe4
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/META-INF/MANIFEST.MF b/org.eclipse.help.base/META-INF/MANIFEST.MF
Alexander Kurtakov 283abe4
index ee34c8e..e4bd703 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/META-INF/MANIFEST.MF
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.help.base/META-INF/MANIFEST.MF
Alexander Kurtakov 283abe4
@@ -43,9 +43,11 @@
Alexander Kurtakov 283abe4
  org.eclipse.core.runtime;bundle-version="[3.11.0,4.0.0)",
Alexander Kurtakov 283abe4
  org.eclipse.help;bundle-version="[3.5.0,4.0.0)";visibility:=reexport,
Alexander Kurtakov 283abe4
  org.eclipse.core.expressions;bundle-version="[3.4.200,4.0.0)",
Alexander Kurtakov 283abe4
- org.apache.lucene.analysis;bundle-version="[3.5.0,4.0.0)",
Alexander Kurtakov 283abe4
- org.apache.lucene.core;bundle-version="[3.5.0,4.0.0)",
Alexander Kurtakov 283abe4
- org.eclipse.core.net;bundle-version="1.2.200"
Alexander Kurtakov 283abe4
+ org.eclipse.core.net;bundle-version="1.2.200",
Alexander Kurtakov 283abe4
+ org.apache.lucene.analyzers-common;bundle-version="5.1.0",
Alexander Kurtakov 283abe4
+ org.apache.lucene.core;bundle-version="5.1.0",
Alexander Kurtakov 283abe4
+ org.apache.lucene.queryparser;bundle-version="5.1.0",
Alexander Kurtakov 283abe4
+ org.apache.lucene.analyzers-smartcn;bundle-version="5.1.0"
Alexander Kurtakov 283abe4
 Import-Package: com.ibm.icu.text,
Alexander Kurtakov 283abe4
  org.eclipse.equinox.http.jetty;resolution:=optional
Alexander Kurtakov 283abe4
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/plugin.xml b/org.eclipse.help.base/plugin.xml
Alexander Kurtakov 283abe4
index 07a5a22..4daf3f0 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/plugin.xml
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.help.base/plugin.xml
Alexander Kurtakov 283abe4
@@ -83,7 +83,7 @@
Alexander Kurtakov 283abe4
       </analyzer>
Alexander Kurtakov 283abe4
       
Alexander Kurtakov 283abe4
             locale="zh"
Alexander Kurtakov 283abe4
-            class="org.apache.lucene.analysis.cn.ChineseAnalyzer">
Alexander Kurtakov 283abe4
+            class="org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer">
Alexander Kurtakov 283abe4
       </analyzer>
Alexander Kurtakov 283abe4
       
Alexander Kurtakov 283abe4
             locale="cs"
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/AnalyzerFactory.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/AnalyzerFactory.java
Alexander Kurtakov 283abe4
index 4ea3b21..704b0e9 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/AnalyzerFactory.java
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/AnalyzerFactory.java
Alexander Kurtakov 283abe4
@@ -1,5 +1,5 @@
Alexander Kurtakov 283abe4
 /*******************************************************************************
Alexander Kurtakov 283abe4
- * Copyright (c) 2012 IBM Corporation and others.
Alexander Kurtakov 283abe4
+ * Copyright (c) 2012, 2015 IBM Corporation and others.
Alexander Kurtakov 283abe4
  * All rights reserved. This program and the accompanying materials
Alexander Kurtakov 283abe4
  * are made available under the terms of the Eclipse Public License v1.0
Alexander Kurtakov 283abe4
  * which accompanies this distribution, and is available at
Alexander Kurtakov 283abe4
@@ -7,6 +7,7 @@
Alexander Kurtakov 283abe4
  *
Alexander Kurtakov 283abe4
  * Contributors:
Alexander Kurtakov 283abe4
  *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
+ *     Sopot Cela - Bug 466829 - Migration to Lucene 5
Alexander Kurtakov 283abe4
  *******************************************************************************/
Alexander Kurtakov 283abe4
 package org.eclipse.help.internal.search;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
@@ -19,8 +20,9 @@
Alexander Kurtakov 283abe4
 import org.apache.lucene.analysis.fr.FrenchAnalyzer;
Alexander Kurtakov 283abe4
 import org.apache.lucene.analysis.nl.DutchAnalyzer;
Alexander Kurtakov 283abe4
 import org.apache.lucene.analysis.ru.RussianAnalyzer;
Alexander Kurtakov 283abe4
-import org.apache.lucene.util.Version;
Alexander Kurtakov 283abe4
-import org.eclipse.core.runtime.*;
Alexander Kurtakov 283abe4
+import org.eclipse.core.runtime.CoreException;
Alexander Kurtakov 283abe4
+import org.eclipse.core.runtime.IConfigurationElement;
Alexander Kurtakov 283abe4
+import org.eclipse.core.runtime.IExecutableExtension;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 /**
Alexander Kurtakov 283abe4
  * A factory responsible for instantiating a lucene {@link Analyzer}.
Alexander Kurtakov 283abe4
@@ -30,27 +32,26 @@
Alexander Kurtakov 283abe4
 	public Analyzer create() {
Alexander Kurtakov 283abe4
 		if (locale == null)
Alexander Kurtakov 283abe4
 			return null;
Alexander Kurtakov 283abe4
-		Version version = Version.LUCENE_35;
Alexander Kurtakov 283abe4
 		if ("pt".equals(locale)) //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			return new BrazilianAnalyzer(version);
Alexander Kurtakov 283abe4
+			return new BrazilianAnalyzer();
Alexander Kurtakov 283abe4
 		if ("ja".equals(locale)) //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			return new CJKAnalyzer(version);
Alexander Kurtakov 283abe4
+			return new CJKAnalyzer();
Alexander Kurtakov 283abe4
 		if ("ko".equals(locale)) //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			return new CJKAnalyzer(version);
Alexander Kurtakov 283abe4
+			return new CJKAnalyzer();
Alexander Kurtakov 283abe4
 		if ("pt".equals(locale)) //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			return new BrazilianAnalyzer(version);
Alexander Kurtakov 283abe4
+			return new BrazilianAnalyzer();
Alexander Kurtakov 283abe4
 		if ("cs".equals(locale)) //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			return new CzechAnalyzer(version);
Alexander Kurtakov 283abe4
+			return new CzechAnalyzer();
Alexander Kurtakov 283abe4
 		if ("de".equals(locale)) //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			return new GermanAnalyzer(version);
Alexander Kurtakov 283abe4
+			return new GermanAnalyzer();
Alexander Kurtakov 283abe4
 		if ("el".equals(locale)) //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			return new GreekAnalyzer(version);
Alexander Kurtakov 283abe4
+			return new GreekAnalyzer();
Alexander Kurtakov 283abe4
 		if ("fr".equals(locale)) //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			return new FrenchAnalyzer(version);
Alexander Kurtakov 283abe4
+			return new FrenchAnalyzer();
Alexander Kurtakov 283abe4
 		if ("nl".equals(locale)) //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			return new DutchAnalyzer(version);
Alexander Kurtakov 283abe4
+			return new DutchAnalyzer();
Alexander Kurtakov 283abe4
 		if ("ru".equals(locale)) //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			return new RussianAnalyzer(version);
Alexander Kurtakov 283abe4
+			return new RussianAnalyzer();
Alexander Kurtakov 283abe4
 		//unknown language
Alexander Kurtakov 283abe4
 		return null;
Alexander Kurtakov 283abe4
 
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java
Alexander Kurtakov 283abe4
index a066aa4..a2183f9 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java
Alexander Kurtakov 283abe4
@@ -8,18 +8,25 @@
Alexander Kurtakov 283abe4
  * Contributors:
Alexander Kurtakov 283abe4
  *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
  *     Alexander Kurtakov - Bug 460787
Alexander Kurtakov 283abe4
+ *     Sopot Cela - Bug 466829 - Migration to Lucene 5
Alexander Kurtakov 283abe4
  *******************************************************************************/
Alexander Kurtakov 283abe4
 package org.eclipse.help.internal.search;
Alexander Kurtakov 283abe4
-import java.io.*;
Alexander Kurtakov 283abe4
-import java.util.HashSet;
Alexander Kurtakov 283abe4
-import java.util.Set;
Alexander Kurtakov 283abe4
+import java.util.ArrayList;
Alexander Kurtakov 283abe4
+import java.util.List;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-import org.apache.lucene.analysis.*;
Alexander Kurtakov 283abe4
-import org.apache.lucene.util.Version;
Alexander Kurtakov 283abe4
+import org.apache.lucene.analysis.Analyzer;
Alexander Kurtakov 283abe4
+import org.apache.lucene.analysis.TokenStream;
Alexander Kurtakov 283abe4
+import org.apache.lucene.analysis.Tokenizer;
Alexander Kurtakov 283abe4
+import org.apache.lucene.analysis.core.StopFilter;
Alexander Kurtakov 283abe4
+import org.apache.lucene.analysis.en.EnglishPossessiveFilter;
Alexander Kurtakov 283abe4
+import org.apache.lucene.analysis.en.PorterStemFilter;
Alexander Kurtakov 283abe4
+import org.apache.lucene.analysis.miscellaneous.KeywordRepeatFilter;
Alexander Kurtakov 283abe4
+import org.apache.lucene.analysis.util.CharArraySet;
Alexander Kurtakov 283abe4
 /**
Alexander Kurtakov 283abe4
  * Lucene Analyzer for English. LowerCaseTokenizer->StopFilter->PorterStemFilter
Alexander Kurtakov 283abe4
  */
Alexander Kurtakov 283abe4
 public final class Analyzer_en extends Analyzer {
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
 	/**
Alexander Kurtakov 283abe4
 	 * Constructor for Analyzer_en.
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
@@ -27,18 +34,25 @@
Alexander Kurtakov 283abe4
 		super();
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 	/**
Alexander Kurtakov 283abe4
-	 * Creates a TokenStream which tokenizes all the text in the provided
Alexander Kurtakov 283abe4
+	 * Creates a TokenStreamComponents which tokenizes all the text in the provided
Alexander Kurtakov 283abe4
 	 * Reader.
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
-	public final TokenStream tokenStream(String fieldName, Reader reader) {
Alexander Kurtakov 283abe4
-		return new PorterStemFilter(new StopFilter(Version.LUCENE_30, new LowerCaseAndDigitsTokenizer(reader), getStopWords(), false));
Alexander Kurtakov 283abe4
+	@Override
Alexander Kurtakov 283abe4
+	public final TokenStreamComponents createComponents(String fieldName) {
Alexander Kurtakov 283abe4
+			final Tokenizer source;
Alexander Kurtakov 283abe4
+	      	source = new LowerCaseAndDigitsTokenizer();
Alexander Kurtakov 283abe4
+	      	TokenStream result = new EnglishPossessiveFilter(source);
Alexander Kurtakov 283abe4
+		    result = new StopFilter(result, new CharArraySet(getStopWords(), false));
Alexander Kurtakov 283abe4
+		    result = new KeywordRepeatFilter(result);
Alexander Kurtakov 283abe4
+		    result = new PorterStemFilter(result);
Alexander Kurtakov 283abe4
+		    return new TokenStreamComponents(source, result);
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-	private Set<String> stopWords;
Alexander Kurtakov 283abe4
+	private List<String> stopWords;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-	private Set<String> getStopWords() {
Alexander Kurtakov 283abe4
+	private List<String> getStopWords() {
Alexander Kurtakov 283abe4
 		if ( stopWords == null ) {
Alexander Kurtakov 283abe4
-			stopWords = new HashSet<String>();
Alexander Kurtakov 283abe4
+			stopWords = new ArrayList<String>();
Alexander Kurtakov 283abe4
 			for (int i = 0; i < STOP_WORDS.length; i++) {
Alexander Kurtakov 283abe4
 			    stopWords.add(STOP_WORDS[i]);
Alexander Kurtakov 283abe4
 			}
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/DefaultAnalyzer.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/DefaultAnalyzer.java
Alexander Kurtakov 283abe4
index 4109474..e3c8722 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/DefaultAnalyzer.java
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/DefaultAnalyzer.java
Alexander Kurtakov 283abe4
@@ -7,22 +7,20 @@
Alexander Kurtakov 283abe4
  * Contributors:
Alexander Kurtakov 283abe4
  *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
  *     Alexander Kurtakov - Bug 460787
Alexander Kurtakov 283abe4
+ *     Sopot Cela - Bug 466829 - Migration to Lucene 5
Alexander Kurtakov 283abe4
  *******************************************************************************/
Alexander Kurtakov 283abe4
 package org.eclipse.help.internal.search;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-import java.io.Reader;
Alexander Kurtakov 283abe4
 import java.util.Locale;
Alexander Kurtakov 283abe4
 import java.util.StringTokenizer;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-import com.ibm.icu.text.BreakIterator;
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
 import org.apache.lucene.analysis.Analyzer;
Alexander Kurtakov 283abe4
-import org.apache.lucene.analysis.LowerCaseFilter;
Alexander Kurtakov 283abe4
-import org.apache.lucene.analysis.TokenStream;
Alexander Kurtakov 283abe4
-import org.apache.lucene.util.Version;
Alexander Kurtakov 283abe4
+import org.apache.lucene.analysis.Tokenizer;
Alexander Kurtakov 283abe4
+import org.apache.lucene.analysis.core.LowerCaseFilter;
Alexander Kurtakov 283abe4
+import org.eclipse.core.runtime.Platform;
Alexander Kurtakov 283abe4
 import org.eclipse.help.internal.base.HelpBasePlugin;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-import org.eclipse.core.runtime.Platform;
Alexander Kurtakov 283abe4
+import com.ibm.icu.text.BreakIterator;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 /**
Alexander Kurtakov 283abe4
@@ -84,11 +82,14 @@
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	/**
Alexander Kurtakov 283abe4
-	 * Creates a TokenStream which tokenizes all the text in the provided
Alexander Kurtakov 283abe4
+	 * Creates a TokenStreamComponents which tokenizes all the text in the provided
Alexander Kurtakov 283abe4
 	 * Reader.
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
-	public final TokenStream tokenStream(String fieldName, Reader reader) {
Alexander Kurtakov 283abe4
-		return new LowerCaseFilter(Version.LUCENE_30, new WordTokenStream(fieldName, reader, locale));
Alexander Kurtakov 283abe4
+	@Override
Alexander Kurtakov 283abe4
+	public final TokenStreamComponents createComponents(String fieldName) {
Alexander Kurtakov 283abe4
+		Tokenizer source = new WordTokenStream(locale);
Alexander Kurtakov 283abe4
+		LowerCaseFilter filter = new LowerCaseFilter(source);
Alexander Kurtakov 283abe4
+		return new TokenStreamComponents(source, filter);
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	/**
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/LowerCaseAndDigitsTokenizer.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/LowerCaseAndDigitsTokenizer.java
Alexander Kurtakov 283abe4
index a475688..cbb2472 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/LowerCaseAndDigitsTokenizer.java
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/LowerCaseAndDigitsTokenizer.java
Alexander Kurtakov 283abe4
@@ -8,27 +8,26 @@
Alexander Kurtakov 283abe4
  * Contributors:
Alexander Kurtakov 283abe4
  *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
  *     Alexander Kurtakov - Bug 460787
Alexander Kurtakov 283abe4
+ *     Sopot Cela - Bug 466829 - Migration to Lucene 5
Alexander Kurtakov 283abe4
  *******************************************************************************/
Alexander Kurtakov 283abe4
 package org.eclipse.help.internal.search;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-import java.io.*;
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
-import org.apache.lucene.analysis.*;
Alexander Kurtakov 283abe4
-import org.apache.lucene.util.Version;
Alexander Kurtakov 283abe4
+import org.apache.lucene.analysis.util.CharTokenizer;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 /**
Alexander Kurtakov 283abe4
  * Tokenizer breaking words around letters or digits.
Alexander Kurtakov 283abe4
  */
Alexander Kurtakov 283abe4
 public class LowerCaseAndDigitsTokenizer extends CharTokenizer {
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-    public LowerCaseAndDigitsTokenizer(Reader input) {
Alexander Kurtakov 283abe4
-        super(Version.LUCENE_30, input);
Alexander Kurtakov 283abe4
+    public LowerCaseAndDigitsTokenizer() {
Alexander Kurtakov 283abe4
+        super();
Alexander Kurtakov 283abe4
     }
Alexander Kurtakov 283abe4
     protected char normalize(char c) {
Alexander Kurtakov 283abe4
         return Character.toLowerCase(c);
Alexander Kurtakov 283abe4
     }
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-    protected boolean isTokenChar(char c) {
Alexander Kurtakov 283abe4
+    @Override
Alexander Kurtakov 283abe4
+    public boolean isTokenChar(int c) {
Alexander Kurtakov 283abe4
         return Character.isLetterOrDigit(c);
Alexander Kurtakov 283abe4
     }
Alexander Kurtakov 283abe4
 
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/LuceneSearchDocument.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/LuceneSearchDocument.java
Alexander Kurtakov 283abe4
index 60a545d..804bf5e 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/LuceneSearchDocument.java
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/LuceneSearchDocument.java
Alexander Kurtakov 283abe4
@@ -1,5 +1,5 @@
Alexander Kurtakov 283abe4
 /*******************************************************************************
Alexander Kurtakov 283abe4
- * Copyright (c) 2010, 2011 IBM Corporation and others.
Alexander Kurtakov 283abe4
+ * Copyright (c) 2010, 2015 IBM Corporation and others.
Alexander Kurtakov 283abe4
  * All rights reserved. This program and the accompanying materials
Alexander Kurtakov 283abe4
  * are made available under the terms of the Eclipse Public License v1.0
Alexander Kurtakov 283abe4
  * which accompanies this distribution, and is available at
Alexander Kurtakov 283abe4
@@ -7,6 +7,7 @@
Alexander Kurtakov 283abe4
  *
Alexander Kurtakov 283abe4
  * Contributors:
Alexander Kurtakov 283abe4
  *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
+ *     Sopot Cela - Bug 466829 - Migration to Lucene 5
Alexander Kurtakov 283abe4
  *******************************************************************************/
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 package org.eclipse.help.internal.search;
Alexander Kurtakov 283abe4
@@ -16,6 +17,8 @@
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 import org.apache.lucene.document.Document;
Alexander Kurtakov 283abe4
 import org.apache.lucene.document.Field;
Alexander Kurtakov 283abe4
+import org.apache.lucene.document.StoredField;
Alexander Kurtakov 283abe4
+import org.apache.lucene.document.TextField;
Alexander Kurtakov 283abe4
 import org.eclipse.help.search.ISearchDocument;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 /**
Alexander Kurtakov 283abe4
@@ -31,22 +34,22 @@
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	public void setTitle(String title) {
Alexander Kurtakov 283abe4
-		doc.add(new Field("title", title, Field.Store.NO, Field.Index.ANALYZED)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-		doc.add(new Field("exact_title", title, Field.Store.NO, Field.Index.ANALYZED)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-		doc.add(new Field("raw_title", title, Field.Store.YES, Field.Index.NO)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+		doc.add(new TextField("title", title, Field.Store.NO)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+		doc.add(new TextField("exact_title", title, Field.Store.NO)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+		doc.add(new StoredField("raw_title", title)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	public void setSummary(String summary) {
Alexander Kurtakov 283abe4
-	  	doc.add(new Field("summary", summary, Field.Store.YES, Field.Index.NO)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+	  	doc.add(new StoredField("summary", summary)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	public void addContents(String contents) {
Alexander Kurtakov 283abe4
-		doc.add(new Field("contents", new StringReader(contents))); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-		doc.add(new Field("exact_contents", new StringReader(contents))); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+		doc.add(new TextField("contents", new StringReader(contents))); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+		doc.add(new TextField("exact_contents", new StringReader(contents))); //$NON-NLS-1$
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	public void setHasFilters(boolean hasFilters) {
Alexander Kurtakov 283abe4
-		doc.add(new Field("filters", Boolean.toString(hasFilters), Field.Store.YES, Field.Index.NO)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+		doc.add(new StoredField("filters", Boolean.toString(hasFilters))); //$NON-NLS-1$
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	public Document getDocument() {
Alexander Kurtakov 283abe4
@@ -54,8 +57,8 @@
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	public void addContents(Reader contents, Reader exactContents) {
Alexander Kurtakov 283abe4
-		doc.add(new Field("contents", contents)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-		doc.add(new Field("exact_contents", exactContents)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+		doc.add(new TextField("contents", contents)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+		doc.add(new TextField("exact_contents", exactContents)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 }
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginIndex.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginIndex.java
Alexander Kurtakov 283abe4
index ca9cd67..7952c8d 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginIndex.java
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginIndex.java
Alexander Kurtakov 283abe4
@@ -1,5 +1,5 @@
Alexander Kurtakov 283abe4
 /*******************************************************************************
Alexander Kurtakov 283abe4
- * Copyright (c) 2005, 2014 IBM Corporation and others.
Alexander Kurtakov 283abe4
+ * Copyright (c) 2005, 2015 IBM Corporation and others.
Alexander Kurtakov 283abe4
  * All rights reserved. This program and the accompanying materials
Alexander Kurtakov 283abe4
  * are made available under the terms of the Eclipse Public License v1.0
Alexander Kurtakov 283abe4
  * which accompanies this distribution, and is available at
Alexander Kurtakov 283abe4
@@ -7,6 +7,7 @@
Alexander Kurtakov 283abe4
  *
Alexander Kurtakov 283abe4
  * Contributors:
Alexander Kurtakov 283abe4
  *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
+ *     Sopot Cela - Bug 466829 - Migration to Lucene 5
Alexander Kurtakov 283abe4
  *******************************************************************************/
Alexander Kurtakov 283abe4
 package org.eclipse.help.internal.search;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
@@ -152,6 +153,7 @@
Alexander Kurtakov 283abe4
 					.getProperty(SearchIndex.DEPENDENCIES_KEY_ANALYZER);
Alexander Kurtakov 283abe4
 			if (!targetIndex.isLuceneCompatible(lucene)
Alexander Kurtakov 283abe4
 					|| !targetIndex.isAnalyzerCompatible(analyzer)) {
Alexander Kurtakov 283abe4
+				HelpBasePlugin.logError("Error trying to consume Lucene index from bundle "+bundle.toString()+". Please use an index built with Lucene 5 or higher.", null); //$NON-NLS-1$ //$NON-NLS-2$
Alexander Kurtakov 283abe4
 				return false;
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
 		} catch (MalformedURLException mue) {
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java
Alexander Kurtakov 283abe4
deleted file mode 100644
Alexander Kurtakov 283abe4
index 08cf58a..0000000
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java
Alexander Kurtakov 283abe4
+++ /dev/null
Alexander Kurtakov 283abe4
@@ -1,459 +0,0 @@
Alexander Kurtakov 283abe4
-/*******************************************************************************
Alexander Kurtakov 283abe4
- * Copyright (c) 2000, 2012 IBM Corporation and others.
Alexander Kurtakov 283abe4
- * All rights reserved. This program and the accompanying materials
Alexander Kurtakov 283abe4
- * are made available under the terms of the Eclipse Public License v1.0
Alexander Kurtakov 283abe4
- * which accompanies this distribution, and is available at
Alexander Kurtakov 283abe4
- * http://www.eclipse.org/legal/epl-v10.html
Alexander Kurtakov 283abe4
- *
Alexander Kurtakov 283abe4
- * Contributors:
Alexander Kurtakov 283abe4
- *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
- *     Chris Torrence  - patch for bug Bug 107648
Alexander Kurtakov 283abe4
- *******************************************************************************/
Alexander Kurtakov 283abe4
-package org.eclipse.help.internal.search;
Alexander Kurtakov 283abe4
-import java.io.*;
Alexander Kurtakov 283abe4
-import java.util.ArrayList;
Alexander Kurtakov 283abe4
-import java.util.Collection;
Alexander Kurtakov 283abe4
-import java.util.Iterator;
Alexander Kurtakov 283abe4
-import java.util.List;
Alexander Kurtakov 283abe4
-import java.util.Locale;
Alexander Kurtakov 283abe4
-import java.util.StringTokenizer;
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
-import org.apache.lucene.analysis.*;
Alexander Kurtakov 283abe4
-import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
Alexander Kurtakov 283abe4
-import org.apache.lucene.index.*;
Alexander Kurtakov 283abe4
-import org.apache.lucene.search.*;
Alexander Kurtakov 283abe4
-import org.eclipse.help.internal.base.*;
Alexander Kurtakov 283abe4
-/**
Alexander Kurtakov 283abe4
- * Build query acceptable by the search engine.
Alexander Kurtakov 283abe4
- */
Alexander Kurtakov 283abe4
-public class QueryBuilder {
Alexander Kurtakov 283abe4
-	// Maximum allowed number of terms
Alexander Kurtakov 283abe4
-	private static final int MAX_TERMS = 10;
Alexander Kurtakov 283abe4
-	// Maximum allowed number of ORs
Alexander Kurtakov 283abe4
-	private static final int MAX_UNIONS = 4;
Alexander Kurtakov 283abe4
-	// Maximum allowed number terms with wild cards
Alexander Kurtakov 283abe4
-	private static final int MAX_WILD_TERMS = 2;
Alexander Kurtakov 283abe4
-	// Query from user
Alexander Kurtakov 283abe4
-	private String searchWords;
Alexander Kurtakov 283abe4
-	// Descriptor of Analyzer to process the query words
Alexander Kurtakov 283abe4
-	private AnalyzerDescriptor analyzerDesc;
Alexander Kurtakov 283abe4
-	// Analyzer to process the query words
Alexander Kurtakov 283abe4
-	private Analyzer analyzer;
Alexander Kurtakov 283abe4
-	// List of QueryWordsToken
Alexander Kurtakov 283abe4
-	private List<QueryWordsToken> analyzedTokens;
Alexander Kurtakov 283abe4
-	// List of words to highlight
Alexander Kurtakov 283abe4
-	private List<String> highlightWords = new ArrayList<String>();
Alexander Kurtakov 283abe4
-	private Locale locale;
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * Creates a query builder for the search word. The search word is processed
Alexander Kurtakov 283abe4
-	 * by a lexical analyzer.
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	public QueryBuilder(String searchWords, AnalyzerDescriptor analyzerDesc) {
Alexander Kurtakov 283abe4
-		this.searchWords = searchWords;
Alexander Kurtakov 283abe4
-		String language = analyzerDesc.getLang();
Alexander Kurtakov 283abe4
-		if (language.length() >= 5) {
Alexander Kurtakov 283abe4
-			this.locale = new Locale(language.substring(0, 2), language
Alexander Kurtakov 283abe4
-					.substring(3, 5));
Alexander Kurtakov 283abe4
-		} else {
Alexander Kurtakov 283abe4
-			this.locale = new Locale(language.substring(0, 2), ""); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		this.analyzerDesc = analyzerDesc;
Alexander Kurtakov 283abe4
-		this.analyzer = analyzerDesc.getAnalyzer();
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * Splits user query into tokens and returns a list of QueryWordsToken's.
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	private List<QueryWordsToken> tokenizeUserQuery(String searchWords) {
Alexander Kurtakov 283abe4
-	    List<QueryWordsToken> tokenList = new ArrayList<QueryWordsToken>();
Alexander Kurtakov 283abe4
-		//Divide along quotation marks
Alexander Kurtakov 283abe4
-		//StringTokenizer qTokenizer = new StringTokenizer(searchWords.trim(),
Alexander Kurtakov 283abe4
-		//		"\"", true); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-		boolean withinQuotation = false;
Alexander Kurtakov 283abe4
-		String quotedString = ""; //$NON-NLS-1$
Alexander Kurtakov 283abe4
-		int termCount = 0;// keep track of number of terms to disallow too many
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
-		int fromIndex = -1;
Alexander Kurtakov 283abe4
-		searchWords = searchWords.trim();
Alexander Kurtakov 283abe4
-		while((fromIndex = searchWords.indexOf("\"", fromIndex+1))!= -1){ //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			withinQuotation = !withinQuotation;
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		if( withinQuotation ) {
Alexander Kurtakov 283abe4
-			searchWords = searchWords + "\""; //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			withinQuotation = !withinQuotation;
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
-		StringTokenizer qTokenizer = new StringTokenizer(searchWords,"\"",true); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-		int orCount = 0; // keep track of number of ORs to disallow too many
Alexander Kurtakov 283abe4
-		while (qTokenizer.hasMoreTokens()) {
Alexander Kurtakov 283abe4
-			String curToken = qTokenizer.nextToken();
Alexander Kurtakov 283abe4
-			if (curToken.equals("\"")) { //$NON-NLS-1$
Alexander Kurtakov 283abe4
-				if (withinQuotation) {
Alexander Kurtakov 283abe4
-					// check for too many terms
Alexander Kurtakov 283abe4
-					if (BaseHelpSystem.getMode() == BaseHelpSystem.MODE_INFOCENTER
Alexander Kurtakov 283abe4
-							&& ++termCount > MAX_TERMS) {
Alexander Kurtakov 283abe4
-						throw new QueryTooComplexException();
Alexander Kurtakov 283abe4
-					}
Alexander Kurtakov 283abe4
-					tokenList.add(QueryWordsToken.exactPhrase(quotedString));
Alexander Kurtakov 283abe4
-				} else {
Alexander Kurtakov 283abe4
-					quotedString = ""; //$NON-NLS-1$
Alexander Kurtakov 283abe4
-				}
Alexander Kurtakov 283abe4
-				withinQuotation = !withinQuotation;
Alexander Kurtakov 283abe4
-				continue;
Alexander Kurtakov 283abe4
-			} else if (withinQuotation) {
Alexander Kurtakov 283abe4
-				quotedString = curToken;
Alexander Kurtakov 283abe4
-				continue;
Alexander Kurtakov 283abe4
-			} else {
Alexander Kurtakov 283abe4
-				//divide unquoted strings along white space
Alexander Kurtakov 283abe4
-				StringTokenizer parser = new StringTokenizer(curToken.trim());
Alexander Kurtakov 283abe4
-				while (parser.hasMoreTokens()) {
Alexander Kurtakov 283abe4
-					String token = parser.nextToken();
Alexander Kurtakov 283abe4
-					if (token.equalsIgnoreCase(QueryWordsToken.AND().value)) {
Alexander Kurtakov 283abe4
-						tokenList.add(QueryWordsToken.AND());
Alexander Kurtakov 283abe4
-					} else if (token
Alexander Kurtakov 283abe4
-							.equalsIgnoreCase(QueryWordsToken.OR().value)) {
Alexander Kurtakov 283abe4
-						// Check for too many OR terms
Alexander Kurtakov 283abe4
-						if (BaseHelpSystem.getMode() == BaseHelpSystem.MODE_INFOCENTER
Alexander Kurtakov 283abe4
-								&& ++orCount > MAX_UNIONS) {
Alexander Kurtakov 283abe4
-							throw new QueryTooComplexException();
Alexander Kurtakov 283abe4
-						}
Alexander Kurtakov 283abe4
-						tokenList.add(QueryWordsToken.OR());
Alexander Kurtakov 283abe4
-					} else if (token
Alexander Kurtakov 283abe4
-							.equalsIgnoreCase(QueryWordsToken.NOT().value)) {
Alexander Kurtakov 283abe4
-						tokenList.add(QueryWordsToken.NOT());
Alexander Kurtakov 283abe4
-					} else {
Alexander Kurtakov 283abe4
-						// check for too many terms
Alexander Kurtakov 283abe4
-						if (BaseHelpSystem.getMode() == BaseHelpSystem.MODE_INFOCENTER
Alexander Kurtakov 283abe4
-								&& ++termCount > MAX_TERMS) {
Alexander Kurtakov 283abe4
-							throw new QueryTooComplexException();
Alexander Kurtakov 283abe4
-						}
Alexander Kurtakov 283abe4
-						tokenList.add(QueryWordsToken.word(token));
Alexander Kurtakov 283abe4
-					}
Alexander Kurtakov 283abe4
-				}
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		return tokenList;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * Apply the Analyzer to the search tokens and return the list of processed
Alexander Kurtakov 283abe4
-	 * QueryWordsToken's.
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	private List<QueryWordsToken> analyzeTokens(List<QueryWordsToken> tokens) {
Alexander Kurtakov 283abe4
-		boolean isTokenAfterNot = false;
Alexander Kurtakov 283abe4
-		List<QueryWordsToken> newTokens = new ArrayList<QueryWordsToken>();
Alexander Kurtakov 283abe4
-		int wildCardTermCount = 0;
Alexander Kurtakov 283abe4
-		for (int i = 0; i < tokens.size(); i++) {
Alexander Kurtakov 283abe4
-			QueryWordsToken token = tokens.get(i);
Alexander Kurtakov 283abe4
-			if (token.type == QueryWordsToken.WORD) {
Alexander Kurtakov 283abe4
-				int questionMIndex = token.value.indexOf('?');
Alexander Kurtakov 283abe4
-				int starIndex = token.value.indexOf('*');
Alexander Kurtakov 283abe4
-				if (starIndex >= 0 || questionMIndex >= 0) {
Alexander Kurtakov 283abe4
-					if (BaseHelpSystem.getMode() == BaseHelpSystem.MODE_INFOCENTER
Alexander Kurtakov 283abe4
-							&& ++wildCardTermCount > MAX_WILD_TERMS) {
Alexander Kurtakov 283abe4
-						throw new QueryTooComplexException();
Alexander Kurtakov 283abe4
-					}
Alexander Kurtakov 283abe4
-					newTokens.add(QueryWordsToken.word(token.value
Alexander Kurtakov 283abe4
-							.toLowerCase(locale)));
Alexander Kurtakov 283abe4
-					// add word to the list of words to highlight
Alexander Kurtakov 283abe4
-					if (!isTokenAfterNot && !highlightWords.contains(token.value)) {
Alexander Kurtakov 283abe4
-						highlightWords.add(token.value);
Alexander Kurtakov 283abe4
-					}
Alexander Kurtakov 283abe4
-				} else {
Alexander Kurtakov 283abe4
-					List<String> wordList = analyzeText(analyzer, "contents", //$NON-NLS-1$
Alexander Kurtakov 283abe4
-							token.value);
Alexander Kurtakov 283abe4
-					if (wordList.size() > 0) {
Alexander Kurtakov 283abe4
-						if (!isTokenAfterNot && !highlightWords.contains(token.value)) {
Alexander Kurtakov 283abe4
-							// add original word to the list of words to
Alexander Kurtakov 283abe4
-							// highlight
Alexander Kurtakov 283abe4
-							highlightWords.add(token.value);
Alexander Kurtakov 283abe4
-						}
Alexander Kurtakov 283abe4
-						if (wordList.size() == 1) {
Alexander Kurtakov 283abe4
-							String word = wordList.get(0);
Alexander Kurtakov 283abe4
-							newTokens.add(QueryWordsToken.word(word));
Alexander Kurtakov 283abe4
-							// add analyzed word to the list of words to
Alexander Kurtakov 283abe4
-							// highlight
Alexander Kurtakov 283abe4
-							// this is required to highlight stemmed words
Alexander Kurtakov 283abe4
-							if (!isTokenAfterNot && !highlightWords.contains(word)) {
Alexander Kurtakov 283abe4
-								highlightWords.add(word);
Alexander Kurtakov 283abe4
-							}
Alexander Kurtakov 283abe4
-						} else {
Alexander Kurtakov 283abe4
-							QueryWordsPhrase phrase = QueryWordsToken.phrase();
Alexander Kurtakov 283abe4
-							for (Iterator<String> it = wordList.iterator(); it
Alexander Kurtakov 283abe4
-									.hasNext();) {
Alexander Kurtakov 283abe4
-								String word = it.next();
Alexander Kurtakov 283abe4
-								phrase.addWord(word);
Alexander Kurtakov 283abe4
-								// add each analyzed word to the list of words
Alexander Kurtakov 283abe4
-								// to highlight
Alexander Kurtakov 283abe4
-								// this is only required to highlight stemmed
Alexander Kurtakov 283abe4
-								// words.
Alexander Kurtakov 283abe4
-								// Adding words should not be done when
Alexander Kurtakov 283abe4
-								// DefaultAnalyzer is used,
Alexander Kurtakov 283abe4
-								// because it does not perform stemming and
Alexander Kurtakov 283abe4
-								// common words removal
Alexander Kurtakov 283abe4
-								// which would result in common characters
Alexander Kurtakov 283abe4
-								// highlighted all over (bug 30263)
Alexander Kurtakov 283abe4
-								if (!analyzerDesc.getId().startsWith(
Alexander Kurtakov 283abe4
-										HelpBasePlugin.PLUGIN_ID + "#")) { //$NON-NLS-1$
Alexander Kurtakov 283abe4
-									if (!isTokenAfterNot && !highlightWords.contains(word)) {
Alexander Kurtakov 283abe4
-										highlightWords.add(word);
Alexander Kurtakov 283abe4
-									}
Alexander Kurtakov 283abe4
-								}
Alexander Kurtakov 283abe4
-							}
Alexander Kurtakov 283abe4
-							newTokens.add(phrase);
Alexander Kurtakov 283abe4
-						}
Alexander Kurtakov 283abe4
-					}
Alexander Kurtakov 283abe4
-				}
Alexander Kurtakov 283abe4
-			} else if (// forget ANDs
Alexander Kurtakov 283abe4
-			/*
Alexander Kurtakov 283abe4
-			 * token.type == SearchQueryToken.AND ||
Alexander Kurtakov 283abe4
-			 */
Alexander Kurtakov 283abe4
-			token.type == QueryWordsToken.OR
Alexander Kurtakov 283abe4
-					|| token.type == QueryWordsToken.NOT)
Alexander Kurtakov 283abe4
-				newTokens.add(token);
Alexander Kurtakov 283abe4
-			else if (token.type == QueryWordsToken.EXACT_PHRASE) {
Alexander Kurtakov 283abe4
-				List<String> wordList = analyzeText(analyzer, "exact_contents", //$NON-NLS-1$
Alexander Kurtakov 283abe4
-						token.value);
Alexander Kurtakov 283abe4
-				if (wordList.size() > 0) {
Alexander Kurtakov 283abe4
-					if (!isTokenAfterNot && !highlightWords.contains(token.value)) {
Alexander Kurtakov 283abe4
-						// add original word to the list of words to highlight
Alexander Kurtakov 283abe4
-						highlightWords.add(token.value);
Alexander Kurtakov 283abe4
-					}
Alexander Kurtakov 283abe4
-				}
Alexander Kurtakov 283abe4
-				QueryWordsExactPhrase phrase = QueryWordsToken.exactPhrase();
Alexander Kurtakov 283abe4
-				for (Iterator<String> it = wordList.iterator(); it.hasNext();) {
Alexander Kurtakov 283abe4
-					String word = it.next();
Alexander Kurtakov 283abe4
-					phrase.addWord(word);
Alexander Kurtakov 283abe4
-					// add analyzed word to the list of words to highlight
Alexander Kurtakov 283abe4
-					// if (!highlightWords.contains(word))
Alexander Kurtakov 283abe4
-					//	highlightWords.add(word);
Alexander Kurtakov 283abe4
-				}
Alexander Kurtakov 283abe4
-				// add phrase only if not empty
Alexander Kurtakov 283abe4
-				if (phrase.getWords().size() > 0) {
Alexander Kurtakov 283abe4
-					newTokens.add(phrase);
Alexander Kurtakov 283abe4
-				}
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
-			isTokenAfterNot = (token.type == QueryWordsToken.NOT);
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		return newTokens;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * Get a list of tokens corresponding to a search word or phrase
Alexander Kurtakov 283abe4
-	 *
Alexander Kurtakov 283abe4
-	 * @return List of String
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	private List<String> analyzeText(Analyzer analyzer, String fieldName, String text) {
Alexander Kurtakov 283abe4
-		List<String> words = new ArrayList<String>(1);
Alexander Kurtakov 283abe4
-		Reader reader = new StringReader(text);
Alexander Kurtakov 283abe4
-		TokenStream tStream = analyzer.tokenStream(fieldName, reader);
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
-		CharTermAttribute termAttribute = tStream.getAttribute(CharTermAttribute.class);
Alexander Kurtakov 283abe4
-		try {
Alexander Kurtakov 283abe4
-			while (tStream.incrementToken()) {
Alexander Kurtakov 283abe4
-				String term = termAttribute.toString();
Alexander Kurtakov 283abe4
-				words.add(term);
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
-			reader.close();
Alexander Kurtakov 283abe4
-		} catch (IOException ioe) {
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
-		return words;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * Obtains Lucene Query from tokens
Alexander Kurtakov 283abe4
-	 *
Alexander Kurtakov 283abe4
-	 * @return Query or null if no query could be created
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	private Query createLuceneQuery(List<QueryWordsToken> searchTokens, String[] fieldNames,
Alexander Kurtakov 283abe4
-			float[] boosts) {
Alexander Kurtakov 283abe4
-		// Get queries for parts separated by OR
Alexander Kurtakov 283abe4
-		List<Query> requiredQueries = getRequiredQueries(searchTokens, fieldNames,
Alexander Kurtakov 283abe4
-				boosts);
Alexander Kurtakov 283abe4
-		if (requiredQueries.size() == 0)
Alexander Kurtakov 283abe4
-			return null;
Alexander Kurtakov 283abe4
-		else if (requiredQueries.size() <= 1)
Alexander Kurtakov 283abe4
-			return requiredQueries.get(0);
Alexander Kurtakov 283abe4
-		else
Alexander Kurtakov 283abe4
-			/* if (requiredQueries.size() > 1) */
Alexander Kurtakov 283abe4
-			// OR queries
Alexander Kurtakov 283abe4
-			return (orQueries(requiredQueries));
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * Obtains Lucene queries for token sequences separated at OR.
Alexander Kurtakov 283abe4
-	 *
Alexander Kurtakov 283abe4
-	 * @return List of Query (could be empty)
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	private List<Query> getRequiredQueries(List<QueryWordsToken> tokens, String[] fieldNames,
Alexander Kurtakov 283abe4
-			float[] boosts) {
Alexander Kurtakov 283abe4
-		List<Query> oredQueries = new ArrayList<Query>();
Alexander Kurtakov 283abe4
-		ArrayList<QueryWordsToken> requiredQueryTokens = new ArrayList<QueryWordsToken>();
Alexander Kurtakov 283abe4
-		for (int i = 0; i < tokens.size(); i++) {
Alexander Kurtakov 283abe4
-			QueryWordsToken token = tokens.get(i);
Alexander Kurtakov 283abe4
-			if (token.type != QueryWordsToken.OR) {
Alexander Kurtakov 283abe4
-				requiredQueryTokens.add(token);
Alexander Kurtakov 283abe4
-			} else {
Alexander Kurtakov 283abe4
-				Query reqQuery = getRequiredQuery(requiredQueryTokens,
Alexander Kurtakov 283abe4
-						fieldNames, boosts);
Alexander Kurtakov 283abe4
-				if (reqQuery != null)
Alexander Kurtakov 283abe4
-					oredQueries.add(reqQuery);
Alexander Kurtakov 283abe4
-				requiredQueryTokens = new ArrayList<QueryWordsToken>();
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		Query reqQuery = getRequiredQuery(requiredQueryTokens, fieldNames,
Alexander Kurtakov 283abe4
-				boosts);
Alexander Kurtakov 283abe4
-		if (reqQuery != null)
Alexander Kurtakov 283abe4
-			oredQueries.add(reqQuery);
Alexander Kurtakov 283abe4
-		return oredQueries;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	private Query orQueries(Collection<Query> queries) {
Alexander Kurtakov 283abe4
-		BooleanQuery bq = new BooleanQuery();
Alexander Kurtakov 283abe4
-		for (Iterator<Query> it = queries.iterator(); it.hasNext();) {
Alexander Kurtakov 283abe4
-			Query q = it.next();
Alexander Kurtakov 283abe4
-			bq.add(q, BooleanClause.Occur.SHOULD);
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		return bq;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * Obtains Lucene Query for tokens containing only AND and NOT operators.
Alexander Kurtakov 283abe4
-	 *
Alexander Kurtakov 283abe4
-	 * @return BooleanQuery or null if no query could be created from the tokens
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	private Query getRequiredQuery(List<QueryWordsToken> requiredTokens, String[] fieldNames,
Alexander Kurtakov 283abe4
-			float[] boosts) {
Alexander Kurtakov 283abe4
-		BooleanQuery retQuery = new BooleanQuery();
Alexander Kurtakov 283abe4
-		boolean requiredTermExist = false;
Alexander Kurtakov 283abe4
-		// Parse tokens left to right
Alexander Kurtakov 283abe4
-		QueryWordsToken operator = null;
Alexander Kurtakov 283abe4
-		for (int i = 0; i < requiredTokens.size(); i++) {
Alexander Kurtakov 283abe4
-			QueryWordsToken token = requiredTokens.get(i);
Alexander Kurtakov 283abe4
-			if (token.type == QueryWordsToken.AND
Alexander Kurtakov 283abe4
-					|| token.type == QueryWordsToken.NOT) {
Alexander Kurtakov 283abe4
-				operator = token;
Alexander Kurtakov 283abe4
-				continue;
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
-			// Creates queries for all fields
Alexander Kurtakov 283abe4
-			Query qs[] = new Query[fieldNames.length];
Alexander Kurtakov 283abe4
-			for (int f = 0; f < fieldNames.length; f++) {
Alexander Kurtakov 283abe4
-				qs[f] = token.createLuceneQuery(fieldNames[f], boosts[f]);
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
-			// creates the boolean query of all fields
Alexander Kurtakov 283abe4
-			Query q = qs[0];
Alexander Kurtakov 283abe4
-			if (fieldNames.length > 1) {
Alexander Kurtakov 283abe4
-				BooleanQuery allFieldsQuery = new BooleanQuery();
Alexander Kurtakov 283abe4
-				for (int f = 0; f < fieldNames.length; f++)
Alexander Kurtakov 283abe4
-					allFieldsQuery.add(qs[f], BooleanClause.Occur.SHOULD);
Alexander Kurtakov 283abe4
-				q = allFieldsQuery;
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
-			if (operator != null && operator.type == QueryWordsToken.NOT) {
Alexander Kurtakov 283abe4
-				retQuery.add(q, BooleanClause.Occur.MUST_NOT); // add as prohibited
Alexander Kurtakov 283abe4
-			} else {
Alexander Kurtakov 283abe4
-				retQuery.add(q, BooleanClause.Occur.MUST); // add as required
Alexander Kurtakov 283abe4
-				requiredTermExist = true;
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		if (!requiredTermExist) {
Alexander Kurtakov 283abe4
-			return null; // cannot search for prohibited only
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		return retQuery;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	private Query getLuceneQuery(String[] fieldNames, float[] boosts) {
Alexander Kurtakov 283abe4
-		Query luceneQuery = createLuceneQuery(analyzedTokens, fieldNames,
Alexander Kurtakov 283abe4
-				boosts);
Alexander Kurtakov 283abe4
-		return luceneQuery;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * @param fieldNames -
Alexander Kurtakov 283abe4
-	 *            Collection of field names of type String (e.g. "h1"); the
Alexander Kurtakov 283abe4
-	 *            search will be performed on the given fields
Alexander Kurtakov 283abe4
-	 * @param fieldSearchOnly -
Alexander Kurtakov 283abe4
-	 *            boolean indicating if field only search should be performed;
Alexander Kurtakov 283abe4
-	 *            if set to false, default field "contents" and all other fields
Alexander Kurtakov 283abe4
-	 *            will be searched
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	public Query getLuceneQuery(Collection<String> fieldNames, boolean fieldSearchOnly)
Alexander Kurtakov 283abe4
-			throws QueryTooComplexException {
Alexander Kurtakov 283abe4
-		// split search query into tokens
Alexander Kurtakov 283abe4
-		List<QueryWordsToken> userTokens = tokenizeUserQuery(searchWords);
Alexander Kurtakov 283abe4
-		analyzedTokens = analyzeTokens(userTokens);
Alexander Kurtakov 283abe4
-		return buildLuceneQuery(fieldNames, fieldSearchOnly);
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * @param fieldNames -
Alexander Kurtakov 283abe4
-	 *            Collection of field names of type String (e.g. "h1"); the
Alexander Kurtakov 283abe4
-	 *            search will be performed on the given fields
Alexander Kurtakov 283abe4
-	 * @param fieldSearchOnly -
Alexander Kurtakov 283abe4
-	 *            boolean indicating if field only search should be performed;
Alexander Kurtakov 283abe4
-	 *            if set to false, default field "contents" and all other fields
Alexander Kurtakov 283abe4
-	 *            will be searched
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	private Query buildLuceneQuery(Collection<String> fieldNames,
Alexander Kurtakov 283abe4
-			boolean fieldSearchOnly) {
Alexander Kurtakov 283abe4
-		String[] fields;
Alexander Kurtakov 283abe4
-		float[] boosts;
Alexander Kurtakov 283abe4
-		if (fieldSearchOnly) {
Alexander Kurtakov 283abe4
-			fields = new String[fieldNames.size()];
Alexander Kurtakov 283abe4
-			boosts = new float[fieldNames.size()];
Alexander Kurtakov 283abe4
-			Iterator<String> fieldNamesIt = fieldNames.iterator();
Alexander Kurtakov 283abe4
-			for (int i = 0; i < fieldNames.size(); i++) {
Alexander Kurtakov 283abe4
-				fields[i] = fieldNamesIt.next();
Alexander Kurtakov 283abe4
-				boosts[i] = 5.0f;
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
-		} else {
Alexander Kurtakov 283abe4
-			fields = new String[fieldNames.size() + 2];
Alexander Kurtakov 283abe4
-	        boosts = new float[fieldNames.size() + 2];
Alexander Kurtakov 283abe4
-			Iterator<String> fieldNamesIt = fieldNames.iterator();
Alexander Kurtakov 283abe4
-			for (int i = 0; i < fieldNames.size(); i++) {
Alexander Kurtakov 283abe4
-				fields[i] = fieldNamesIt.next();
Alexander Kurtakov 283abe4
-				boosts[i] = 5.0f;
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
-			fields[fieldNames.size()] = "contents"; //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			boosts[fieldNames.size()] = 1.0f;
Alexander Kurtakov 283abe4
-            fields[fieldNames.size()+1] = "title"; //$NON-NLS-1$
Alexander Kurtakov 283abe4
-	        boosts[fieldNames.size()+1] = 1.0f;
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		Query query = getLuceneQuery(fields, boosts);
Alexander Kurtakov 283abe4
-		query = improveRankingForUnqotedPhrase(query, fields, boosts);
Alexander Kurtakov 283abe4
-		return query;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * If user query contained only words (no quotaions nor operators) extends
Alexander Kurtakov 283abe4
-	 * query with term phrase representing entire user query i.e for user string
Alexander Kurtakov 283abe4
-	 * a b, the query a AND b will be extended to "a b" OR a AND b
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	private Query improveRankingForUnqotedPhrase(Query query, String[] fields,
Alexander Kurtakov 283abe4
-			float[] boosts) {
Alexander Kurtakov 283abe4
-		if (query == null)
Alexander Kurtakov 283abe4
-			return query;
Alexander Kurtakov 283abe4
-		// check if all tokens are words
Alexander Kurtakov 283abe4
-		for (int i = 0; i < analyzedTokens.size(); i++)
Alexander Kurtakov 283abe4
-			if (analyzedTokens.get(i).type != QueryWordsToken.WORD)
Alexander Kurtakov 283abe4
-				return query;
Alexander Kurtakov 283abe4
-		// Create phrase query for all tokens and OR with original query
Alexander Kurtakov 283abe4
-		BooleanQuery booleanQuery = new BooleanQuery();
Alexander Kurtakov 283abe4
-		booleanQuery.add(query, BooleanClause.Occur.SHOULD);
Alexander Kurtakov 283abe4
-		PhraseQuery[] phraseQueries = new PhraseQuery[fields.length];
Alexander Kurtakov 283abe4
-		for (int f = 0; f < fields.length; f++) {
Alexander Kurtakov 283abe4
-			phraseQueries[f] = new PhraseQuery();
Alexander Kurtakov 283abe4
-			for (int i = 0; i < analyzedTokens.size(); i++) {
Alexander Kurtakov 283abe4
-				Term t = new Term(fields[f], analyzedTokens
Alexander Kurtakov 283abe4
-						.get(i).value);
Alexander Kurtakov 283abe4
-				phraseQueries[f].add(t);
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
-			phraseQueries[f].setBoost(10 * boosts[f]);
Alexander Kurtakov 283abe4
-			booleanQuery.add(phraseQueries[f], BooleanClause.Occur.SHOULD);
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		return booleanQuery;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * Obtains analyzed terms from query as one string. Words are double quoted,
Alexander Kurtakov 283abe4
-	 * and separated by space. The analyzed words are needed for highlighting
Alexander Kurtakov 283abe4
-	 * word roots.
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	public String gethighlightTerms() {
Alexander Kurtakov 283abe4
-		StringBuffer buf = new StringBuffer();
Alexander Kurtakov 283abe4
-		for (Iterator<String> it = highlightWords.iterator(); it.hasNext();) {
Alexander Kurtakov 283abe4
-			buf.append('"');
Alexander Kurtakov 283abe4
-			buf.append(it.next());
Alexander Kurtakov 283abe4
-			buf.append("\" "); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		return buf.toString();
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-}
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryWordsExactPhrase.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryWordsExactPhrase.java
Alexander Kurtakov 283abe4
deleted file mode 100644
Alexander Kurtakov 283abe4
index 324b8e1..0000000
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryWordsExactPhrase.java
Alexander Kurtakov 283abe4
+++ /dev/null
Alexander Kurtakov 283abe4
@@ -1,50 +0,0 @@
Alexander Kurtakov 283abe4
-/*******************************************************************************
Alexander Kurtakov 283abe4
- * Copyright (c) 2000, 2011 IBM Corporation and others.
Alexander Kurtakov 283abe4
- * All rights reserved. This program and the accompanying materials
Alexander Kurtakov 283abe4
- * are made available under the terms of the Eclipse Public License v1.0
Alexander Kurtakov 283abe4
- * which accompanies this distribution, and is available at
Alexander Kurtakov 283abe4
- * http://www.eclipse.org/legal/epl-v10.html
Alexander Kurtakov 283abe4
- *
Alexander Kurtakov 283abe4
- * Contributors:
Alexander Kurtakov 283abe4
- *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
- *******************************************************************************/
Alexander Kurtakov 283abe4
-package org.eclipse.help.internal.search;
Alexander Kurtakov 283abe4
-import java.util.ArrayList;
Alexander Kurtakov 283abe4
-import java.util.Iterator;
Alexander Kurtakov 283abe4
-import java.util.List;
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
-import org.apache.lucene.index.*;
Alexander Kurtakov 283abe4
-import org.apache.lucene.search.*;
Alexander Kurtakov 283abe4
-/**
Alexander Kurtakov 283abe4
- * Represents a quoted token in user search query words
Alexander Kurtakov 283abe4
- */
Alexander Kurtakov 283abe4
-public class QueryWordsExactPhrase extends QueryWordsToken {
Alexander Kurtakov 283abe4
-	private List<String> words;
Alexander Kurtakov 283abe4
-	public QueryWordsExactPhrase() {
Alexander Kurtakov 283abe4
-		super(QueryWordsToken.EXACT_PHRASE, ""); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-		words = new ArrayList<String>();
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	public void addWord(String word) {
Alexander Kurtakov 283abe4
-		words.add(word);
Alexander Kurtakov 283abe4
-		if (words.size() <= 1)
Alexander Kurtakov 283abe4
-			value = word;
Alexander Kurtakov 283abe4
-		else
Alexander Kurtakov 283abe4
-			value += " " + word; //$NON-NLS-1$
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	public List<String> getWords() {
Alexander Kurtakov 283abe4
-		return words;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * Creates a lucene query for a field
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	public Query createLuceneQuery(String field, float boost) {
Alexander Kurtakov 283abe4
-		PhraseQuery q = new PhraseQuery();
Alexander Kurtakov 283abe4
-		for (Iterator<String> it = getWords().iterator(); it.hasNext();) {
Alexander Kurtakov 283abe4
-			String word = it.next();
Alexander Kurtakov 283abe4
-			Term t = new Term("exact_" + field, word); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			q.add(t);
Alexander Kurtakov 283abe4
-			q.setBoost(boost);
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		return q;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-}
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryWordsPhrase.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryWordsPhrase.java
Alexander Kurtakov 283abe4
deleted file mode 100644
Alexander Kurtakov 283abe4
index 8a94e89..0000000
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryWordsPhrase.java
Alexander Kurtakov 283abe4
+++ /dev/null
Alexander Kurtakov 283abe4
@@ -1,51 +0,0 @@
Alexander Kurtakov 283abe4
-/*******************************************************************************
Alexander Kurtakov 283abe4
- * Copyright (c) 2000, 2011 IBM Corporation and others.
Alexander Kurtakov 283abe4
- * All rights reserved. This program and the accompanying materials
Alexander Kurtakov 283abe4
- * are made available under the terms of the Eclipse Public License v1.0
Alexander Kurtakov 283abe4
- * which accompanies this distribution, and is available at
Alexander Kurtakov 283abe4
- * http://www.eclipse.org/legal/epl-v10.html
Alexander Kurtakov 283abe4
- *
Alexander Kurtakov 283abe4
- * Contributors:
Alexander Kurtakov 283abe4
- *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
- *******************************************************************************/
Alexander Kurtakov 283abe4
-package org.eclipse.help.internal.search;
Alexander Kurtakov 283abe4
-import java.util.ArrayList;
Alexander Kurtakov 283abe4
-import java.util.Iterator;
Alexander Kurtakov 283abe4
-import java.util.List;
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
-import org.apache.lucene.index.*;
Alexander Kurtakov 283abe4
-import org.apache.lucene.search.*;
Alexander Kurtakov 283abe4
-/**
Alexander Kurtakov 283abe4
- * Represents a phrase (not quoted) token in user search query words It consists
Alexander Kurtakov 283abe4
- * of several words created by an analyzer
Alexander Kurtakov 283abe4
- */
Alexander Kurtakov 283abe4
-public class QueryWordsPhrase extends QueryWordsToken {
Alexander Kurtakov 283abe4
-	private List<String> words;
Alexander Kurtakov 283abe4
-	public QueryWordsPhrase() {
Alexander Kurtakov 283abe4
-		super(QueryWordsToken.PHRASE, ""); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-		words = new ArrayList<String>();
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	public void addWord(String word) {
Alexander Kurtakov 283abe4
-		words.add(word);
Alexander Kurtakov 283abe4
-		if (words.size() <= 1)
Alexander Kurtakov 283abe4
-			value = word;
Alexander Kurtakov 283abe4
-		else
Alexander Kurtakov 283abe4
-			value += " " + word; //$NON-NLS-1$
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	public List<String> getWords() {
Alexander Kurtakov 283abe4
-		return words;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * Creates a lucene query for a field
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	public Query createLuceneQuery(String field, float boost) {
Alexander Kurtakov 283abe4
-		PhraseQuery q = new PhraseQuery();
Alexander Kurtakov 283abe4
-		for (Iterator<String> it = getWords().iterator(); it.hasNext();) {
Alexander Kurtakov 283abe4
-			String word = it.next();
Alexander Kurtakov 283abe4
-			Term t = new Term(field, word);
Alexander Kurtakov 283abe4
-			q.add(t);
Alexander Kurtakov 283abe4
-			q.setBoost(boost);
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		return q;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-}
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryWordsToken.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryWordsToken.java
Alexander Kurtakov 283abe4
deleted file mode 100644
Alexander Kurtakov 283abe4
index 6ba76f2..0000000
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryWordsToken.java
Alexander Kurtakov 283abe4
+++ /dev/null
Alexander Kurtakov 283abe4
@@ -1,81 +0,0 @@
Alexander Kurtakov 283abe4
-/*******************************************************************************
Alexander Kurtakov 283abe4
- * Copyright (c) 2000, 2007 IBM Corporation and others.
Alexander Kurtakov 283abe4
- * All rights reserved. This program and the accompanying materials
Alexander Kurtakov 283abe4
- * are made available under the terms of the Eclipse Public License v1.0
Alexander Kurtakov 283abe4
- * which accompanies this distribution, and is available at
Alexander Kurtakov 283abe4
- * http://www.eclipse.org/legal/epl-v10.html
Alexander Kurtakov 283abe4
- *
Alexander Kurtakov 283abe4
- * Contributors:
Alexander Kurtakov 283abe4
- *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
- *******************************************************************************/
Alexander Kurtakov 283abe4
-package org.eclipse.help.internal.search;
Alexander Kurtakov 283abe4
-import org.apache.lucene.index.*;
Alexander Kurtakov 283abe4
-import org.apache.lucene.search.*;
Alexander Kurtakov 283abe4
-/**
Alexander Kurtakov 283abe4
- * Represents a token in user search query words
Alexander Kurtakov 283abe4
- */
Alexander Kurtakov 283abe4
-public class QueryWordsToken {
Alexander Kurtakov 283abe4
-	public static final int AND = 0;
Alexander Kurtakov 283abe4
-	public static final int OR = 1;
Alexander Kurtakov 283abe4
-	public static final int NOT = 2;
Alexander Kurtakov 283abe4
-	public static final int EXACT_PHRASE = 3;
Alexander Kurtakov 283abe4
-	public static final int PHRASE = 4;
Alexander Kurtakov 283abe4
-	public static final int WORD = 5;
Alexander Kurtakov 283abe4
-	private static final QueryWordsToken fAND = new QueryWordsToken(AND, "AND"); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-	private static final QueryWordsToken fOR = new QueryWordsToken(OR, "OR"); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-	private static final QueryWordsToken fNOT = new QueryWordsToken(NOT, "NOT"); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-	public int type;
Alexander Kurtakov 283abe4
-	public String value;
Alexander Kurtakov 283abe4
-	protected QueryWordsToken(int type, String value) {
Alexander Kurtakov 283abe4
-		this.type = type;
Alexander Kurtakov 283abe4
-		this.value = value;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * Creates a lucene query for a field
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	public Query createLuceneQuery(String field, float boost) {
Alexander Kurtakov 283abe4
-		Query q;
Alexander Kurtakov 283abe4
-		int questionPos = value.indexOf('?');
Alexander Kurtakov 283abe4
-		int starPos = value.indexOf('*');
Alexander Kurtakov 283abe4
-		if (questionPos >= 0 || starPos >= 0) {
Alexander Kurtakov 283abe4
-			if (questionPos == -1 && starPos == value.length() - 1) {
Alexander Kurtakov 283abe4
-				Term t = new Term("exact_" + field, value.substring(0, starPos)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-				q = new PrefixQuery(t);
Alexander Kurtakov 283abe4
-				((PrefixQuery) q).setBoost(boost);
Alexander Kurtakov 283abe4
-			} else {
Alexander Kurtakov 283abe4
-				Term t = new Term("exact_" + field, value); //$NON-NLS-1$
Alexander Kurtakov 283abe4
-				q = new WildcardQuery(t);
Alexander Kurtakov 283abe4
-				((WildcardQuery) q).setBoost(boost);
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
-		} else {
Alexander Kurtakov 283abe4
-			Term t = new Term(field, value);
Alexander Kurtakov 283abe4
-			q = new TermQuery(t);
Alexander Kurtakov 283abe4
-			((TermQuery) q).setBoost(boost);
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		// after updating Lucene, set boost on a Query class
Alexander Kurtakov 283abe4
-		return q;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	public static QueryWordsToken AND() {
Alexander Kurtakov 283abe4
-		return fAND;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	public static QueryWordsToken OR() {
Alexander Kurtakov 283abe4
-		return fOR;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	public static QueryWordsToken NOT() {
Alexander Kurtakov 283abe4
-		return fNOT;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	public static QueryWordsToken word(String word) {
Alexander Kurtakov 283abe4
-		return new QueryWordsToken(QueryWordsToken.WORD, word);
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	public static QueryWordsPhrase phrase() {
Alexander Kurtakov 283abe4
-		return new QueryWordsPhrase();
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	public static QueryWordsExactPhrase exactPhrase() {
Alexander Kurtakov 283abe4
-		return new QueryWordsExactPhrase();
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	public static QueryWordsExactPhrase exactPhrase(String word) {
Alexander Kurtakov 283abe4
-		QueryWordsExactPhrase token = new QueryWordsExactPhrase();
Alexander Kurtakov 283abe4
-		token.addWord(word);
Alexander Kurtakov 283abe4
-		return token;
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-}
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
Alexander Kurtakov 283abe4
index 67963a5..131ac65 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
Alexander Kurtakov 283abe4
@@ -1,14 +1,13 @@
Alexander Kurtakov 283abe4
 /*******************************************************************************
Alexander Kurtakov 283abe4
- * Copyright (c) 2000, 2014 IBM Corporation and others.
Alexander Kurtakov 283abe4
- * All rights reserved. This program and the accompanying materials
Alexander Kurtakov 283abe4
- * are made available under the terms of the Eclipse Public License v1.0
Alexander Kurtakov 283abe4
+ * Copyright (c) 2000, 2015 IBM Corporation and others. All rights reserved. This program and the
Alexander Kurtakov 283abe4
+ * accompanying materials are made available under the terms of the Eclipse Public License v1.0
Alexander Kurtakov 283abe4
  * which accompanies this distribution, and is available at
Alexander Kurtakov 283abe4
  * http://www.eclipse.org/legal/epl-v10.html
Alexander Kurtakov 283abe4
  *
Alexander Kurtakov 283abe4
- * Contributors:
Alexander Kurtakov 283abe4
- *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
- *     Holger Voormann - fix for bug 426785 (http://eclip.se/426785)
Alexander Kurtakov 283abe4
- *     Alexander Kurtakov - Bug 460787
Alexander Kurtakov 283abe4
+ * Contributors: IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
+ * Holger Voormann - fix for bug 426785 (http://eclip.se/426785)
Alexander Kurtakov 283abe4
+ * Alexander Kurtakov - Bug 460787
Alexander Kurtakov 283abe4
+ * Sopot Cela - Bug 466829 - Migration to Lucene 5
Alexander Kurtakov 283abe4
  *******************************************************************************/
Alexander Kurtakov 283abe4
 package org.eclipse.help.internal.search;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
@@ -17,6 +16,7 @@
Alexander Kurtakov 283abe4
 import java.io.IOException;
Alexander Kurtakov 283abe4
 import java.io.InputStream;
Alexander Kurtakov 283abe4
 import java.io.RandomAccessFile;
Alexander Kurtakov 283abe4
+import java.io.StringReader;
Alexander Kurtakov 283abe4
 import java.net.MalformedURLException;
Alexander Kurtakov 283abe4
 import java.net.URL;
Alexander Kurtakov 283abe4
 import java.nio.channels.FileLock;
Alexander Kurtakov 283abe4
@@ -33,19 +33,30 @@
Alexander Kurtakov 283abe4
 import java.util.zip.ZipEntry;
Alexander Kurtakov 283abe4
 import java.util.zip.ZipInputStream;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-import org.apache.lucene.analysis.LimitTokenCountAnalyzer;
Alexander Kurtakov 283abe4
+import org.apache.lucene.analysis.miscellaneous.LimitTokenCountAnalyzer;
Alexander Kurtakov 283abe4
 import org.apache.lucene.document.Document;
Alexander Kurtakov 283abe4
 import org.apache.lucene.document.Field;
Alexander Kurtakov 283abe4
+import org.apache.lucene.document.StoredField;
Alexander Kurtakov 283abe4
+import org.apache.lucene.document.StringField;
Alexander Kurtakov 283abe4
+import org.apache.lucene.index.DirectoryReader;
Alexander Kurtakov 283abe4
 import org.apache.lucene.index.IndexReader;
Alexander Kurtakov 283abe4
 import org.apache.lucene.index.IndexWriter;
Alexander Kurtakov 283abe4
-import org.apache.lucene.index.Term;
Alexander Kurtakov 283abe4
-import org.apache.lucene.index.TermDocs;
Alexander Kurtakov 283abe4
-import org.apache.lucene.index.IndexWriterConfig.OpenMode;
Alexander Kurtakov 283abe4
 import org.apache.lucene.index.IndexWriterConfig;
Alexander Kurtakov 283abe4
+import org.apache.lucene.index.IndexWriterConfig.OpenMode;
Alexander Kurtakov 283abe4
+import org.apache.lucene.index.LeafReader;
Alexander Kurtakov 283abe4
 import org.apache.lucene.index.LogByteSizeMergePolicy;
Alexander Kurtakov 283abe4
 import org.apache.lucene.index.LogMergePolicy;
Alexander Kurtakov 283abe4
+import org.apache.lucene.index.PostingsEnum;
Alexander Kurtakov 283abe4
+import org.apache.lucene.index.SlowCompositeReaderWrapper;
Alexander Kurtakov 283abe4
+import org.apache.lucene.index.Term;
Alexander Kurtakov 283abe4
+import org.apache.lucene.queryparser.classic.FastCharStream;
Alexander Kurtakov 283abe4
+import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
Alexander Kurtakov 283abe4
+import org.apache.lucene.queryparser.classic.QueryParserTokenManager;
Alexander Kurtakov 283abe4
+import org.apache.lucene.queryparser.classic.Token;
Alexander Kurtakov 283abe4
+import org.apache.lucene.search.BooleanClause.Occur;
Alexander Kurtakov 283abe4
 import org.apache.lucene.search.BooleanQuery;
Alexander Kurtakov 283abe4
 import org.apache.lucene.search.IndexSearcher;
Alexander Kurtakov 283abe4
+import org.apache.lucene.search.MultiTermQuery;
Alexander Kurtakov 283abe4
 import org.apache.lucene.search.Query;
Alexander Kurtakov 283abe4
 import org.apache.lucene.search.TopDocs;
Alexander Kurtakov 283abe4
 import org.apache.lucene.store.Directory;
Alexander Kurtakov 283abe4
@@ -59,7 +70,6 @@
Alexander Kurtakov 283abe4
 import org.eclipse.core.runtime.OperationCanceledException;
Alexander Kurtakov 283abe4
 import org.eclipse.core.runtime.Platform;
Alexander Kurtakov 283abe4
 import org.eclipse.core.runtime.Status;
Alexander Kurtakov 283abe4
-import org.eclipse.help.internal.HelpPlugin;
Alexander Kurtakov 283abe4
 import org.eclipse.help.internal.base.BaseHelpSystem;
Alexander Kurtakov 283abe4
 import org.eclipse.help.internal.base.HelpBasePlugin;
Alexander Kurtakov 283abe4
 import org.eclipse.help.internal.base.util.HelpProperties;
Alexander Kurtakov 283abe4
@@ -86,7 +96,7 @@
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	private File indexDir;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-	private Directory luceneDirectory;
Alexander Kurtakov 283abe4
+	public Directory luceneDirectory;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	private String locale;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
@@ -133,7 +143,7 @@
Alexander Kurtakov 283abe4
 	private Collection<Thread> searches = new ArrayList<Thread>();
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	private FileLock lock;
Alexander Kurtakov 283abe4
-	private RandomAccessFile raf =  null;
Alexander Kurtakov 283abe4
+	private RandomAccessFile raf = null;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	/**
Alexander Kurtakov 283abe4
 	 * Constructor.
Alexander Kurtakov 283abe4
@@ -170,7 +180,7 @@
Alexander Kurtakov 283abe4
 		inconsistencyFile = new File(indexDir.getParentFile(), locale + ".inconsistent"); //$NON-NLS-1$
Alexander Kurtakov 283abe4
 		htmlSearchParticipant = new HTMLSearchParticipant(indexDir.getAbsolutePath());
Alexander Kurtakov 283abe4
 		try {
Alexander Kurtakov 283abe4
-			luceneDirectory = new NIOFSDirectory(indexDir);
Alexander Kurtakov 283abe4
+			luceneDirectory = new NIOFSDirectory(indexDir.toPath());
Alexander Kurtakov 283abe4
 		} catch (IOException e) {
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
 		if (!exists()) {
Alexander Kurtakov 283abe4
@@ -203,11 +213,11 @@
Alexander Kurtakov 283abe4
 	public IStatus addDocument(String name, URL url) {
Alexander Kurtakov 283abe4
 		try {
Alexander Kurtakov 283abe4
 			Document doc = new Document();
Alexander Kurtakov 283abe4
-			doc.add(new Field(FIELD_NAME, name, Field.Store.YES, Field.Index.NOT_ANALYZED));
Alexander Kurtakov 283abe4
+			doc.add(new StringField(FIELD_NAME, name, Field.Store.YES));
Alexander Kurtakov 283abe4
 			addExtraFields(doc);
Alexander Kurtakov 283abe4
 			String pluginId = LocalSearchManager.getPluginId(name);
Alexander Kurtakov 283abe4
 			if (relativePath != null) {
Alexander Kurtakov 283abe4
-				doc.add(new Field(FIELD_INDEX_ID, relativePath, Field.Store.YES, Field.Index.NOT_ANALYZED));
Alexander Kurtakov 283abe4
+				doc.add(new StringField(FIELD_INDEX_ID, relativePath, Field.Store.YES));
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
 			// check for the explicit search participant.
Alexander Kurtakov 283abe4
 			SearchParticipant participant = null;
Alexander Kurtakov 283abe4
@@ -220,20 +230,22 @@
Alexander Kurtakov 283abe4
 			if (participant == null)
Alexander Kurtakov 283abe4
 				participant = BaseHelpSystem.getLocalSearchManager().getParticipant(pluginId, name);
Alexander Kurtakov 283abe4
 			if (participant != null) {
Alexander Kurtakov 283abe4
-				IStatus status = participant.addDocument(this, pluginId, name, url, id, new LuceneSearchDocument(doc));
Alexander Kurtakov 283abe4
+				IStatus status = participant.addDocument(this, pluginId, name, url, id,
Alexander Kurtakov 283abe4
+						new LuceneSearchDocument(doc));
Alexander Kurtakov 283abe4
 				if (status.getSeverity() == IStatus.OK) {
Alexander Kurtakov 283abe4
 					String filters = doc.get("filters"); //$NON-NLS-1$
Alexander Kurtakov 283abe4
 					indexedDocs.put(name, filters != null ? filters : "0"); //$NON-NLS-1$
Alexander Kurtakov 283abe4
 					if (id != null)
Alexander Kurtakov 283abe4
-						doc.add(new Field("id", id, Field.Store.YES, Field.Index.NO)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+						doc.add(new StoredField("id", id)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
 					if (pid != null)
Alexander Kurtakov 283abe4
-						doc.add(new Field("participantId", pid, Field.Store.YES, Field.Index.NO)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+						doc.add(new StoredField("participantId", pid)); //$NON-NLS-1$
Alexander Kurtakov 283abe4
 					iw.addDocument(doc);
Alexander Kurtakov 283abe4
 				}
Alexander Kurtakov 283abe4
 				return status;
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
 			// default to html
Alexander Kurtakov 283abe4
-			IStatus status = htmlSearchParticipant.addDocument(this, pluginId, name, url, id, new LuceneSearchDocument(doc));
Alexander Kurtakov 283abe4
+			IStatus status = htmlSearchParticipant.addDocument(this, pluginId, name, url, id,
Alexander Kurtakov 283abe4
+					new LuceneSearchDocument(doc));
Alexander Kurtakov 283abe4
 			if (status.getSeverity() == IStatus.OK) {
Alexander Kurtakov 283abe4
 				String filters = doc.get("filters"); //$NON-NLS-1$
Alexander Kurtakov 283abe4
 				indexedDocs.put(name, filters != null ? filters : "0"); //$NON-NLS-1$
Alexander Kurtakov 283abe4
@@ -245,20 +257,21 @@
Alexander Kurtakov 283abe4
 					"IO exception occurred while adding document " + name //$NON-NLS-1$
Alexander Kurtakov 283abe4
 							+ " to index " + indexDir.getAbsolutePath() + ".", //$NON-NLS-1$ //$NON-NLS-2$
Alexander Kurtakov 283abe4
 					e);
Alexander Kurtakov 283abe4
-		}
Alexander Kurtakov 283abe4
-		catch (Exception e) {
Alexander Kurtakov 283abe4
+		} catch (Exception e) {
Alexander Kurtakov 283abe4
 			return new Status(IStatus.ERROR, HelpBasePlugin.PLUGIN_ID, IStatus.ERROR,
Alexander Kurtakov 283abe4
 					"An unexpected internal error occurred while adding document " //$NON-NLS-1$
Alexander Kurtakov 283abe4
 							+ name + " to index " + indexDir.getAbsolutePath() //$NON-NLS-1$
Alexander Kurtakov 283abe4
-							+ ".", e); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+							+ ".", //$NON-NLS-1$
Alexander Kurtakov 283abe4
+					e);
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	/**
Alexander Kurtakov 283abe4
-	 * Add any extra fields that need to be added to this document. Subclasses
Alexander Kurtakov 283abe4
-	 * should override to add more fields.
Alexander Kurtakov 283abe4
+	 * Add any extra fields that need to be added to this document. Subclasses should override to
Alexander Kurtakov 283abe4
+	 * add more fields.
Alexander Kurtakov 283abe4
 	 *
Alexander Kurtakov 283abe4
-	 * @param doc the document to add fields to
Alexander Kurtakov 283abe4
+	 * @param doc
Alexander Kurtakov 283abe4
+	 *            the document to add fields to
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
 	protected void addExtraFields(Document doc) {
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
@@ -282,8 +295,9 @@
Alexander Kurtakov 283abe4
 			indexedDocs = new HelpProperties(INDEXED_DOCS_FILE, indexDir);
Alexander Kurtakov 283abe4
 			indexedDocs.restore();
Alexander Kurtakov 283abe4
 			setInconsistent(true);
Alexander Kurtakov 283abe4
-			LimitTokenCountAnalyzer analyzer = new LimitTokenCountAnalyzer(analyzerDescriptor.getAnalyzer(), 1000000);
Alexander Kurtakov 283abe4
-			IndexWriterConfig writerConfig = new IndexWriterConfig(org.apache.lucene.util.Version.LUCENE_31, analyzer);
Alexander Kurtakov 283abe4
+			LimitTokenCountAnalyzer analyzer = new LimitTokenCountAnalyzer(analyzerDescriptor.getAnalyzer(),
Alexander Kurtakov 283abe4
+					1000000);
Alexander Kurtakov 283abe4
+			IndexWriterConfig writerConfig = new IndexWriterConfig(analyzer);
Alexander Kurtakov 283abe4
 			writerConfig.setOpenMode(create ? OpenMode.CREATE : OpenMode.APPEND);
Alexander Kurtakov 283abe4
 			LogMergePolicy mergePolicy = new LogByteSizeMergePolicy();
Alexander Kurtakov 283abe4
 			mergePolicy.setMergeFactor(20);
Alexander Kurtakov 283abe4
@@ -307,7 +321,7 @@
Alexander Kurtakov 283abe4
 			indexedDocs = new HelpProperties(INDEXED_DOCS_FILE, indexDir);
Alexander Kurtakov 283abe4
 			indexedDocs.restore();
Alexander Kurtakov 283abe4
 			setInconsistent(true);
Alexander Kurtakov 283abe4
-			ir = IndexReader.open(luceneDirectory, false);
Alexander Kurtakov 283abe4
+			ir = DirectoryReader.open(luceneDirectory);
Alexander Kurtakov 283abe4
 			return true;
Alexander Kurtakov 283abe4
 		} catch (IOException e) {
Alexander Kurtakov 283abe4
 			HelpBasePlugin.logError("Exception occurred in search indexing at beginDeleteBatch.", e); //$NON-NLS-1$
Alexander Kurtakov 283abe4
@@ -323,7 +337,7 @@
Alexander Kurtakov 283abe4
 			if (ir != null) {
Alexander Kurtakov 283abe4
 				ir.close();
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
-			ir = IndexReader.open(luceneDirectory, false);
Alexander Kurtakov 283abe4
+			ir = DirectoryReader.open(luceneDirectory);
Alexander Kurtakov 283abe4
 			return true;
Alexander Kurtakov 283abe4
 		} catch (IOException e) {
Alexander Kurtakov 283abe4
 			HelpBasePlugin.logError("Exception occurred in search indexing at beginDeleteBatch.", e); //$NON-NLS-1$
Alexander Kurtakov 283abe4
@@ -334,14 +348,14 @@
Alexander Kurtakov 283abe4
 	/**
Alexander Kurtakov 283abe4
 	 * Deletes a single document from the index.
Alexander Kurtakov 283abe4
 	 *
Alexander Kurtakov 283abe4
-	 * @param name -
Alexander Kurtakov 283abe4
-	 *            document name
Alexander Kurtakov 283abe4
+	 * @param name
Alexander Kurtakov 283abe4
+	 *            - document name
Alexander Kurtakov 283abe4
 	 * @return IStatus
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
 	public IStatus removeDocument(String name) {
Alexander Kurtakov 283abe4
 		Term term = new Term(FIELD_NAME, name);
Alexander Kurtakov 283abe4
 		try {
Alexander Kurtakov 283abe4
-			ir.deleteDocuments(term);
Alexander Kurtakov 283abe4
+			iw.deleteDocuments(term);
Alexander Kurtakov 283abe4
 			indexedDocs.remove(name);
Alexander Kurtakov 283abe4
 		} catch (IOException e) {
Alexander Kurtakov 283abe4
 			return new Status(IStatus.ERROR, HelpBasePlugin.PLUGIN_ID, IStatus.ERROR,
Alexander Kurtakov 283abe4
@@ -375,11 +389,11 @@
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 			/*
Alexander Kurtakov 283abe4
-			 * The searcher's index reader has it's stuff in memory so it won't
Alexander Kurtakov 283abe4
-			 * know about this change. Close it so that it gets reloaded next search.
Alexander Kurtakov 283abe4
+			 * The searcher's index reader has it's stuff in memory so it won't know about this
Alexander Kurtakov 283abe4
+			 * change. Close it so that it gets reloaded next search.
Alexander Kurtakov 283abe4
 			 */
Alexander Kurtakov 283abe4
 			if (searcher != null) {
Alexander Kurtakov 283abe4
-				searcher.close();
Alexander Kurtakov 283abe4
+				searcher.getIndexReader().close();
Alexander Kurtakov 283abe4
 				searcher = null;
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
 			return true;
Alexander Kurtakov 283abe4
@@ -407,11 +421,11 @@
Alexander Kurtakov 283abe4
 			saveDependencies();
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 			/*
Alexander Kurtakov 283abe4
-			 * The searcher's index reader has it's stuff in memory so it won't
Alexander Kurtakov 283abe4
-			 * know about this change. Close it so that it gets reloaded next search.
Alexander Kurtakov 283abe4
+			 * The searcher's index reader has it's stuff in memory so it won't know about this
Alexander Kurtakov 283abe4
+			 * change. Close it so that it gets reloaded next search.
Alexander Kurtakov 283abe4
 			 */
Alexander Kurtakov 283abe4
 			if (searcher != null) {
Alexander Kurtakov 283abe4
-				searcher.close();
Alexander Kurtakov 283abe4
+				searcher.getIndexReader().close();
Alexander Kurtakov 283abe4
 				searcher = null;
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
 			return true;
Alexander Kurtakov 283abe4
@@ -469,11 +483,11 @@
Alexander Kurtakov 283abe4
 				String indexId = indexIds.get(i);
Alexander Kurtakov 283abe4
 				String indexPath = indexPaths.get(i);
Alexander Kurtakov 283abe4
 				try {
Alexander Kurtakov 283abe4
-					dirList.add(new NIOFSDirectory(new File(indexPath)));
Alexander Kurtakov 283abe4
+					dirList.add(new NIOFSDirectory(new File(indexPath).toPath()));
Alexander Kurtakov 283abe4
 				} catch (IOException ioe) {
Alexander Kurtakov 283abe4
-					HelpBasePlugin
Alexander Kurtakov 283abe4
-							.logError(
Alexander Kurtakov 283abe4
-									"Help search indexing directory could not be created for directory " + indexPath, ioe); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+					HelpBasePlugin.logError(
Alexander Kurtakov 283abe4
+							"Help search indexing directory could not be created for directory " + indexPath, //$NON-NLS-1$
Alexander Kurtakov 283abe4
+							ioe);
Alexander Kurtakov 283abe4
 					continue;
Alexander Kurtakov 283abe4
 				}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
@@ -525,18 +539,19 @@
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	public IStatus removeDuplicates(String name, String[] index_paths) {
Alexander Kurtakov 283abe4
-		TermDocs hrefDocs = null;
Alexander Kurtakov 283abe4
-		TermDocs indexDocs = null;
Alexander Kurtakov 283abe4
-		Term hrefTerm = new Term(FIELD_NAME, name);
Alexander Kurtakov 283abe4
 		try {
Alexander Kurtakov 283abe4
+			LeafReader ar = SlowCompositeReaderWrapper.wrap(ir);
Alexander Kurtakov 283abe4
+			PostingsEnum hrefDocs = null;
Alexander Kurtakov 283abe4
+			PostingsEnum indexDocs = null;
Alexander Kurtakov 283abe4
+			Term hrefTerm = new Term(FIELD_NAME, name);
Alexander Kurtakov 283abe4
 			for (int i = 0; i < index_paths.length; i++) {
Alexander Kurtakov 283abe4
 				Term indexTerm = new Term(FIELD_INDEX_ID, index_paths[i]);
Alexander Kurtakov 283abe4
 				if (i == 0) {
Alexander Kurtakov 283abe4
-					hrefDocs = ir.termDocs(hrefTerm);
Alexander Kurtakov 283abe4
-					indexDocs = ir.termDocs(indexTerm);
Alexander Kurtakov 283abe4
+					hrefDocs = ar.postings(hrefTerm);
Alexander Kurtakov 283abe4
+					indexDocs = ar.postings(indexTerm);
Alexander Kurtakov 283abe4
 				} else {
Alexander Kurtakov 283abe4
-					hrefDocs.seek(hrefTerm);
Alexander Kurtakov 283abe4
-					indexDocs.seek(indexTerm);
Alexander Kurtakov 283abe4
+					hrefDocs = ar.postings(hrefTerm);
Alexander Kurtakov 283abe4
+					indexDocs = ar.postings(indexTerm);
Alexander Kurtakov 283abe4
 				}
Alexander Kurtakov 283abe4
 				removeDocuments(hrefDocs, indexDocs);
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
@@ -545,19 +560,6 @@
Alexander Kurtakov 283abe4
 					"IO exception occurred while removing duplicates of document " + name //$NON-NLS-1$
Alexander Kurtakov 283abe4
 							+ " from index " + indexDir.getAbsolutePath() + ".", //$NON-NLS-1$ //$NON-NLS-2$
Alexander Kurtakov 283abe4
 					ioe);
Alexander Kurtakov 283abe4
-		} finally {
Alexander Kurtakov 283abe4
-			if (hrefDocs != null) {
Alexander Kurtakov 283abe4
-				try {
Alexander Kurtakov 283abe4
-					hrefDocs.close();
Alexander Kurtakov 283abe4
-				} catch (IOException e) {
Alexander Kurtakov 283abe4
-				}
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
-			if (indexDocs != null) {
Alexander Kurtakov 283abe4
-				try {
Alexander Kurtakov 283abe4
-					indexDocs.close();
Alexander Kurtakov 283abe4
-				} catch (IOException e) {
Alexander Kurtakov 283abe4
-				}
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
 		return Status.OK_STATUS;
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
@@ -569,33 +571,33 @@
Alexander Kurtakov 283abe4
 	 * @param docs2
Alexander Kurtakov 283abe4
 	 * @throws IOException
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
-	private void removeDocuments(TermDocs doc1, TermDocs docs2) throws IOException {
Alexander Kurtakov 283abe4
-		if (!doc1.next()) {
Alexander Kurtakov 283abe4
+	private void removeDocuments(PostingsEnum doc1, PostingsEnum docs2) throws IOException {
Alexander Kurtakov 283abe4
+		if (doc1.nextDoc() == PostingsEnum.NO_MORE_DOCS) {
Alexander Kurtakov 283abe4
 			return;
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
-		if (!docs2.next()) {
Alexander Kurtakov 283abe4
+		if (docs2.nextDoc() == PostingsEnum.NO_MORE_DOCS) {
Alexander Kurtakov 283abe4
 			return;
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
 		while (true) {
Alexander Kurtakov 283abe4
-			if (doc1.doc() < docs2.doc()) {
Alexander Kurtakov 283abe4
-				if (!doc1.skipTo(docs2.doc())) {
Alexander Kurtakov 283abe4
-					if (!doc1.next()) {
Alexander Kurtakov 283abe4
+			if (doc1.docID() < docs2.docID()) {
Alexander Kurtakov 283abe4
+				if (doc1.advance(docs2.docID()) == PostingsEnum.NO_MORE_DOCS) {
Alexander Kurtakov 283abe4
+					if (doc1.nextDoc() == PostingsEnum.NO_MORE_DOCS) {
Alexander Kurtakov 283abe4
 						return;
Alexander Kurtakov 283abe4
 					}
Alexander Kurtakov 283abe4
 				}
Alexander Kurtakov 283abe4
-			} else if (doc1.doc() > docs2.doc()) {
Alexander Kurtakov 283abe4
-				if (!docs2.skipTo(doc1.doc())) {
Alexander Kurtakov 283abe4
-					if (!doc1.next()) {
Alexander Kurtakov 283abe4
+			} else if (doc1.docID() > docs2.docID()) {
Alexander Kurtakov 283abe4
+				if (docs2.advance(doc1.docID()) == PostingsEnum.NO_MORE_DOCS) {
Alexander Kurtakov 283abe4
+					if (doc1.nextDoc() == PostingsEnum.NO_MORE_DOCS) {
Alexander Kurtakov 283abe4
 						return;
Alexander Kurtakov 283abe4
 					}
Alexander Kurtakov 283abe4
 				}
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
-			if (doc1.doc() == docs2.doc()) {
Alexander Kurtakov 283abe4
-				ir.deleteDocument(doc1.doc());
Alexander Kurtakov 283abe4
-				if (!doc1.next()) {
Alexander Kurtakov 283abe4
+			if (doc1.docID() == docs2.docID()) {
Alexander Kurtakov 283abe4
+				iw.tryDeleteDocument(ir, doc1.docID());
Alexander Kurtakov 283abe4
+				if (doc1.nextDoc() == PostingsEnum.NO_MORE_DOCS) {
Alexander Kurtakov 283abe4
 					return;
Alexander Kurtakov 283abe4
 				}
Alexander Kurtakov 283abe4
-				if (!docs2.next()) {
Alexander Kurtakov 283abe4
+				if (docs2.nextDoc() == PostingsEnum.NO_MORE_DOCS) {
Alexander Kurtakov 283abe4
 					return;
Alexander Kurtakov 283abe4
 				}
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
@@ -623,20 +625,72 @@
Alexander Kurtakov 283abe4
 			registerSearch(Thread.currentThread());
Alexander Kurtakov 283abe4
 			if (closed)
Alexander Kurtakov 283abe4
 				return;
Alexander Kurtakov 283abe4
-			QueryBuilder queryBuilder = new QueryBuilder(searchQuery.getSearchWord(), analyzerDescriptor);
Alexander Kurtakov 283abe4
-			Query luceneQuery = queryBuilder.getLuceneQuery(searchQuery.getFieldNames(), searchQuery
Alexander Kurtakov 283abe4
-					.isFieldSearch());
Alexander Kurtakov 283abe4
-			if (HelpPlugin.DEBUG_SEARCH) {
Alexander Kurtakov 283abe4
-				System.out.println("Search Query: " + luceneQuery.toString()); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+			String[] fields;
Alexander Kurtakov 283abe4
+			if (searchQuery.isFieldSearch()){
Alexander Kurtakov 283abe4
+				//sometimes you might want to search other than the default fields
Alexander Kurtakov 283abe4
+				fields = (String[]) searchQuery.getFieldNames().toArray();
Alexander Kurtakov 283abe4
+			}else {
Alexander Kurtakov 283abe4
+				fields = new String[]{"contents","title"}; //$NON-NLS-1$ //$NON-NLS-2$
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
-			String highlightTerms = queryBuilder.gethighlightTerms();
Alexander Kurtakov 283abe4
-			if (luceneQuery != null) {
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+			//prepare the parser
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+			MultiFieldQueryParser qb = new MultiFieldQueryParser(fields,analyzerDescriptor.getAnalyzer());
Alexander Kurtakov 283abe4
+			qb.setAllowLeadingWildcard(true);
Alexander Kurtakov 283abe4
+			qb.setAnalyzeRangeTerms(true);
Alexander Kurtakov 283abe4
+			qb.setAutoGeneratePhraseQueries(true);
Alexander Kurtakov 283abe4
+			qb.setMultiTermRewriteMethod(MultiTermQuery.CONSTANT_SCORE_BOOLEAN_REWRITE);
Alexander Kurtakov 283abe4
+			qb.setLowercaseExpandedTerms(true);
Alexander Kurtakov 283abe4
+			qb.setLocale(new Locale(analyzerDescriptor.getLang()));
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+			//parse the "pure" query (no boosting)
Alexander Kurtakov 283abe4
+			Query luceneQuery = qb.parse(searchQuery.getSearchWord());
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+			//we'll merge the pure query with a some boosted queries
Alexander Kurtakov 283abe4
+			Query mergedQuery;
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+			if (!isWildcardQuery(searchQuery.getSearchWord())){
Alexander Kurtakov 283abe4
+				mergedQuery = new BooleanQuery(); //merge for all fields before merging with luceneQuery
Alexander Kurtakov 283abe4
+				for (int i=0;i
Alexander Kurtakov 283abe4
+					Query exactBoostQuery= qb.createPhraseQuery(fields[i], searchQuery.getSearchWord());
Alexander Kurtakov 283abe4
+					exactBoostQuery.setBoost(10.0f);
Alexander Kurtakov 283abe4
+					((BooleanQuery) mergedQuery).add(exactBoostQuery,Occur.SHOULD);
Alexander Kurtakov 283abe4
+				}
Alexander Kurtakov 283abe4
+				((BooleanQuery) mergedQuery).add(luceneQuery,Occur.SHOULD);
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+			}else {
Alexander Kurtakov 283abe4
+				mergedQuery = luceneQuery;
Alexander Kurtakov 283abe4
+			}
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+			Set<String> set = new HashSet<String>();
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+			if (mergedQuery != null) {
Alexander Kurtakov 283abe4
 				if (searcher == null) {
Alexander Kurtakov 283abe4
 					openSearcher();
Alexander Kurtakov 283abe4
 				}
Alexander Kurtakov 283abe4
-				TopDocs topDocs = searcher.search(luceneQuery, null, 1000);
Alexander Kurtakov 283abe4
-				collector.addHits(LocalSearchManager.asList(topDocs, searcher), highlightTerms);
Alexander Kurtakov 283abe4
+				TopDocs topDocs = searcher.search(mergedQuery, 1000);
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+				String highlight=null;
Alexander Kurtakov 283abe4
+				QueryParserTokenManager manager = new QueryParserTokenManager(new FastCharStream(new StringReader(searchQuery.getSearchWord())));
Alexander Kurtakov 283abe4
+				while (true){
Alexander Kurtakov 283abe4
+					Token nextToken = manager.getNextToken();
Alexander Kurtakov 283abe4
+					String toHighlight = null;
Alexander Kurtakov 283abe4
+					if (nextToken.kind==0) break;
Alexander Kurtakov 283abe4
+					String image = nextToken.image;
Alexander Kurtakov 283abe4
+					toHighlight=image;
Alexander Kurtakov 283abe4
+					if ((image.startsWith("\""))&&( image.endsWith("\""))){  //$NON-NLS-1$//$NON-NLS-2$
Alexander Kurtakov 283abe4
+						toHighlight = image.substring(1,image.length()-1);
Alexander Kurtakov 283abe4
+					}
Alexander Kurtakov 283abe4
+					if (image.equals("AND") || image.equals("OR")) //$NON-NLS-1$ //$NON-NLS-2$
Alexander Kurtakov 283abe4
+						continue;
Alexander Kurtakov 283abe4
+					set .add(toHighlight);
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+				}
Alexander Kurtakov 283abe4
+				highlight = buildHighlight(set);
Alexander Kurtakov 283abe4
+				collector.addHits(LocalSearchManager.asList(topDocs, searcher), highlight==null?"":highlight); //$NON-NLS-1$
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
 		} catch (BooleanQuery.TooManyClauses tmc) {
Alexander Kurtakov 283abe4
 			collector.addQTCException(new QueryTooComplexException());
Alexander Kurtakov 283abe4
 		} catch (QueryTooComplexException qe) {
Alexander Kurtakov 283abe4
@@ -647,6 +701,19 @@
Alexander Kurtakov 283abe4
 		} finally {
Alexander Kurtakov 283abe4
 			unregisterSearch(Thread.currentThread());
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
+	}
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+	private boolean isWildcardQuery(String searchWord) {
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+		return searchWord.contains("?")|| searchWord.contains("*");  //$NON-NLS-1$//$NON-NLS-2$
Alexander Kurtakov 283abe4
+	}
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+	private String buildHighlight(Set<String> set) {
Alexander Kurtakov 283abe4
+		StringBuilder sb = new StringBuilder();
Alexander Kurtakov 283abe4
+		for (String string : set) {
Alexander Kurtakov 283abe4
+			sb.append("\""+string+"\"");  //$NON-NLS-1$//$NON-NLS-2$
Alexander Kurtakov 283abe4
+		}
Alexander Kurtakov 283abe4
+		return sb.toString();
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	public String getLocale() {
Alexander Kurtakov 283abe4
@@ -660,13 +727,13 @@
Alexander Kurtakov 283abe4
 		if (docPlugins == null) {
Alexander Kurtakov 283abe4
 			Set<String> totalIds = new HashSet<String>();
Alexander Kurtakov 283abe4
 			IExtensionRegistry registry = Platform.getExtensionRegistry();
Alexander Kurtakov 283abe4
-			IExtensionPoint extensionPoint = registry.getExtensionPoint(TocFileProvider.EXTENSION_POINT_ID_TOC);
Alexander Kurtakov 283abe4
+			IExtensionPoint extensionPoint = registry
Alexander Kurtakov 283abe4
+					.getExtensionPoint(TocFileProvider.EXTENSION_POINT_ID_TOC);
Alexander Kurtakov 283abe4
 			IExtension[] extensions = extensionPoint.getExtensions();
Alexander Kurtakov 283abe4
-			for (int i=0;i
Alexander Kurtakov 283abe4
+			for (int i = 0; i < extensions.length; ++i) {
Alexander Kurtakov 283abe4
 				try {
Alexander Kurtakov 283abe4
 					totalIds.add(extensions[i].getNamespaceIdentifier());
Alexander Kurtakov 283abe4
-				}
Alexander Kurtakov 283abe4
-				catch (InvalidRegistryObjectException e) {
Alexander Kurtakov 283abe4
+				} catch (InvalidRegistryObjectException e) {
Alexander Kurtakov 283abe4
 					// ignore this extension and move on
Alexander Kurtakov 283abe4
 				}
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
@@ -717,25 +784,27 @@
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	/**
Alexander Kurtakov 283abe4
 	 * Determines whether an index can be read by the Lucene bundle
Alexander Kurtakov 283abe4
-	 * @param indexVersionString The version of an Index directory
Alexander Kurtakov 283abe4
+	 *
Alexander Kurtakov 283abe4
+	 * @param indexVersionString
Alexander Kurtakov 283abe4
+	 *            The version of an Index directory
Alexander Kurtakov 283abe4
 	 * @return
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
 	public boolean isLuceneCompatible(String indexVersionString) {
Alexander Kurtakov 283abe4
-		if (indexVersionString==null) return false;
Alexander Kurtakov 283abe4
+		if (indexVersionString == null)
Alexander Kurtakov 283abe4
+			return false;
Alexander Kurtakov 283abe4
 		String luceneVersionString = ""; //$NON-NLS-1$
Alexander Kurtakov 283abe4
 		Bundle luceneBundle = Platform.getBundle(LUCENE_BUNDLE_ID);
Alexander Kurtakov 283abe4
 		if (luceneBundle != null) {
Alexander Kurtakov 283abe4
-			luceneVersionString += luceneBundle.getHeaders()
Alexander Kurtakov 283abe4
-					.get(Constants.BUNDLE_VERSION);
Alexander Kurtakov 283abe4
+			luceneVersionString += luceneBundle.getHeaders().get(Constants.BUNDLE_VERSION);
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
 		Version luceneVersion = new Version(luceneVersionString);
Alexander Kurtakov 283abe4
 		Version indexVersion = new Version(indexVersionString);
Alexander Kurtakov 283abe4
-		Version v191 = new Version(1, 9, 1);
Alexander Kurtakov 283abe4
-		if (indexVersion.compareTo(v191) < 0) {
Alexander Kurtakov 283abe4
-			// index is older than Lucene 1.9.1
Alexander Kurtakov 283abe4
+		Version v500 = new Version(5, 0, 0);
Alexander Kurtakov 283abe4
+		if (indexVersion.compareTo(v500) < 0) {
Alexander Kurtakov 283abe4
+			// index is older than Lucene 5.0.0
Alexander Kurtakov 283abe4
 			return false;
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
-		if ( luceneVersion.compareTo(indexVersion) >= 0 ) {
Alexander Kurtakov 283abe4
+		if (luceneVersion.compareTo(indexVersion) >= 0) {
Alexander Kurtakov 283abe4
 			// Lucene bundle is newer than the index
Alexander Kurtakov 283abe4
 			return true;
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
@@ -802,7 +871,7 @@
Alexander Kurtakov 283abe4
 	public void openSearcher() throws IOException {
Alexander Kurtakov 283abe4
 		synchronized (searcherCreateLock) {
Alexander Kurtakov 283abe4
 			if (searcher == null) {
Alexander Kurtakov 283abe4
-				searcher = new IndexSearcher(IndexReader.open(luceneDirectory, false));
Alexander Kurtakov 283abe4
+				searcher = new IndexSearcher(DirectoryReader.open(luceneDirectory));
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
@@ -820,7 +889,7 @@
Alexander Kurtakov 283abe4
 				if (searches.isEmpty()) {
Alexander Kurtakov 283abe4
 					if (searcher != null) {
Alexander Kurtakov 283abe4
 						try {
Alexander Kurtakov 283abe4
-							searcher.close();
Alexander Kurtakov 283abe4
+							searcher.getIndexReader().close();
Alexander Kurtakov 283abe4
 						} catch (IOException ioe) {
Alexander Kurtakov 283abe4
 						}
Alexander Kurtakov 283abe4
 					}
Alexander Kurtakov 283abe4
@@ -838,7 +907,8 @@
Alexander Kurtakov 283abe4
 	 * Finds and unzips prebuild index specified in preferences
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
 	private void unzipProductIndex() {
Alexander Kurtakov 283abe4
-		String indexPluginId = Platform.getPreferencesService().getString(HelpBasePlugin.PLUGIN_ID, "productIndex", null, null); //$NON-NLS-1$
Alexander Kurtakov 283abe4
+		String indexPluginId = Platform.getPreferencesService().getString(HelpBasePlugin.PLUGIN_ID,
Alexander Kurtakov 283abe4
+				"productIndex", null, null); //$NON-NLS-1$
Alexander Kurtakov 283abe4
 		if (indexPluginId == null || indexPluginId.length() <= 0) {
Alexander Kurtakov 283abe4
 			return;
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
@@ -901,10 +971,11 @@
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
 	private void cleanOldIndex() {
Alexander Kurtakov 283abe4
 		IndexWriter cleaner = null;
Alexander Kurtakov 283abe4
-		LimitTokenCountAnalyzer analyzer = new LimitTokenCountAnalyzer(analyzerDescriptor.getAnalyzer(), 10000);
Alexander Kurtakov 283abe4
+		LimitTokenCountAnalyzer analyzer = new LimitTokenCountAnalyzer(analyzerDescriptor.getAnalyzer(),
Alexander Kurtakov 283abe4
+				10000);
Alexander Kurtakov 283abe4
 		try {
Alexander Kurtakov 283abe4
-			cleaner = new IndexWriter(luceneDirectory, new IndexWriterConfig(org.apache.lucene.util.Version.LUCENE_31, analyzer).setOpenMode(
Alexander Kurtakov 283abe4
-			        OpenMode.CREATE));
Alexander Kurtakov 283abe4
+			cleaner = new IndexWriter(luceneDirectory,
Alexander Kurtakov 283abe4
+					new IndexWriterConfig(analyzer).setOpenMode(OpenMode.CREATE));
Alexander Kurtakov 283abe4
 		} catch (IOException ioe) {
Alexander Kurtakov 283abe4
 		} finally {
Alexander Kurtakov 283abe4
 			try {
Alexander Kurtakov 283abe4
@@ -957,7 +1028,7 @@
Alexander Kurtakov 283abe4
 	 *             if lock already obtained
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
 	public synchronized boolean tryLock() throws OverlappingFileLockException {
Alexander Kurtakov 283abe4
-		if ("none".equals(System.getProperty("osgi.locking"))) {  //$NON-NLS-1$//$NON-NLS-2$
Alexander Kurtakov 283abe4
+		if ("none".equals(System.getProperty("osgi.locking"))) { //$NON-NLS-1$//$NON-NLS-2$
Alexander Kurtakov 283abe4
 			return true; // Act as if lock succeeded
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
 		if (lock != null) {
Alexander Kurtakov 283abe4
@@ -979,7 +1050,7 @@
Alexander Kurtakov 283abe4
 			lock = null;
Alexander Kurtakov 283abe4
 			logLockFailure(ioe);
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
-		if ( raf != null ) {
Alexander Kurtakov 283abe4
+		if (raf != null) {
Alexander Kurtakov 283abe4
 			try {
Alexander Kurtakov 283abe4
 				raf.close();
Alexander Kurtakov 283abe4
 			} catch (IOException e) {
Alexander Kurtakov 283abe4
@@ -1025,9 +1096,9 @@
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
 			lock = null;
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
-		if (raf != null ) {
Alexander Kurtakov 283abe4
+		if (raf != null) {
Alexander Kurtakov 283abe4
 			try {
Alexander Kurtakov 283abe4
-			    raf.close();
Alexander Kurtakov 283abe4
+				raf.close();
Alexander Kurtakov 283abe4
 			} catch (IOException ioe) {
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
 			raf = null;
Alexander Kurtakov 283abe4
@@ -1100,25 +1171,26 @@
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	public IStatus addDocument(String pluginId, String name, URL url, String id, Document doc) {
Alexander Kurtakov 283abe4
 		// try a registered participant for the file format
Alexander Kurtakov 283abe4
-		SearchParticipant participant = BaseHelpSystem.getLocalSearchManager()
Alexander Kurtakov 283abe4
-				.getParticipant(pluginId, name);
Alexander Kurtakov 283abe4
+		SearchParticipant participant = BaseHelpSystem.getLocalSearchManager().getParticipant(pluginId, name);
Alexander Kurtakov 283abe4
 		if (participant != null) {
Alexander Kurtakov 283abe4
 			try {
Alexander Kurtakov 283abe4
 				return participant.addDocument(this, pluginId, name, url, id, new LuceneSearchDocument(doc));
Alexander Kurtakov 283abe4
-			}
Alexander Kurtakov 283abe4
-			catch (Throwable t) {
Alexander Kurtakov 283abe4
+			} catch (Throwable t) {
Alexander Kurtakov 283abe4
 				return new Status(IStatus.ERROR, HelpBasePlugin.PLUGIN_ID, IStatus.ERROR,
Alexander Kurtakov 283abe4
 						"Error while adding document to search participant (addDocument()): " //$NON-NLS-1$
Alexander Kurtakov 283abe4
-						+ name + ", " + url + "for participant " + participant.getClass().getName(), t); //$NON-NLS-1$ //$NON-NLS-2$
Alexander Kurtakov 283abe4
+								+ name + ", " + url + "for participant " + participant.getClass().getName(), //$NON-NLS-1$ //$NON-NLS-2$
Alexander Kurtakov 283abe4
+						t);
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
 		// default to html
Alexander Kurtakov 283abe4
-		return htmlSearchParticipant.addDocument(this, pluginId, name, url, id, new LuceneSearchDocument(doc));
Alexander Kurtakov 283abe4
+		return htmlSearchParticipant.addDocument(this, pluginId, name, url, id,
Alexander Kurtakov 283abe4
+				new LuceneSearchDocument(doc));
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-	public IStatus addSearchableDocument(String pluginId, String name, URL url, String id, ISearchDocument doc) {
Alexander Kurtakov 283abe4
+	public IStatus addSearchableDocument(String pluginId, String name, URL url, String id,
Alexander Kurtakov 283abe4
+			ISearchDocument doc) {
Alexander Kurtakov 283abe4
 		// In the help system the only class that implements ISearchDocument is LuceneSearchDocument
Alexander Kurtakov 283abe4
-		LuceneSearchDocument luceneDoc = (LuceneSearchDocument)doc;
Alexander Kurtakov 283abe4
+		LuceneSearchDocument luceneDoc = (LuceneSearchDocument) doc;
Alexander Kurtakov 283abe4
 		return addDocument(pluginId, name, url, id, luceneDoc.getDocument());
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 }
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SmartAnalyzer.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/SmartAnalyzer.java
Alexander Kurtakov 283abe4
index d0a7bb7..444b66c 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SmartAnalyzer.java
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SmartAnalyzer.java
Alexander Kurtakov 283abe4
@@ -1,5 +1,5 @@
Alexander Kurtakov 283abe4
 /*******************************************************************************
Alexander Kurtakov 283abe4
- * Copyright (c) 2000, 2012 IBM Corporation and others.
Alexander Kurtakov 283abe4
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
Alexander Kurtakov 283abe4
  * All rights reserved. This program and the accompanying materials
Alexander Kurtakov 283abe4
  * are made available under the terms of the Eclipse Public License v1.0
Alexander Kurtakov 283abe4
  * which accompanies this distribution, and is available at
Alexander Kurtakov 283abe4
@@ -7,10 +7,9 @@
Alexander Kurtakov 283abe4
  *
Alexander Kurtakov 283abe4
  * Contributors:
Alexander Kurtakov 283abe4
  *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
+ *     Sopot Cela - Bug 466829 - Migration to Lucene 5
Alexander Kurtakov 283abe4
  *******************************************************************************/
Alexander Kurtakov 283abe4
 package org.eclipse.help.internal.search;
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
-import java.io.*;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 import org.apache.lucene.analysis.*;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
@@ -18,7 +17,7 @@
Alexander Kurtakov 283abe4
  * Smart Analyzer. Chooses underlying implementation based on the field which
Alexander Kurtakov 283abe4
  * text is analyzed.
Alexander Kurtakov 283abe4
  */
Alexander Kurtakov 283abe4
-public final class SmartAnalyzer extends Analyzer {
Alexander Kurtakov 283abe4
+public final class SmartAnalyzer extends AnalyzerWrapper {
Alexander Kurtakov 283abe4
 	Analyzer pluggedInAnalyzer;
Alexander Kurtakov 283abe4
 	Analyzer exactAnalyzer;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
@@ -26,19 +25,19 @@
Alexander Kurtakov 283abe4
 	 * Constructor for SmartAnalyzer.
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
 	public SmartAnalyzer(String locale, Analyzer pluggedInAnalyzer) {
Alexander Kurtakov 283abe4
-		super();
Alexander Kurtakov 283abe4
+		super(pluggedInAnalyzer.getReuseStrategy());
Alexander Kurtakov 283abe4
 		this.pluggedInAnalyzer = pluggedInAnalyzer;
Alexander Kurtakov 283abe4
 		this.exactAnalyzer = new DefaultAnalyzer(locale);
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 	/**
Alexander Kurtakov 283abe4
-	 * Creates a TokenStream which tokenizes all the text in the provided
Alexander Kurtakov 283abe4
-	 * Reader. Delegates to DefaultAnalyzer when field used to search for exact
Alexander Kurtakov 283abe4
+	 * Delegates to DefaultAnalyzer when field used to search for exact
Alexander Kurtakov 283abe4
 	 * match, and to plugged-in analyzer for other fields.
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
-	public final TokenStream tokenStream(String fieldName, Reader reader) {
Alexander Kurtakov 283abe4
+	@Override
Alexander Kurtakov 283abe4
+	public final Analyzer getWrappedAnalyzer(String fieldName) {
Alexander Kurtakov 283abe4
 		if (fieldName != null && fieldName.startsWith("exact_")) { //$NON-NLS-1$
Alexander Kurtakov 283abe4
-			return exactAnalyzer.tokenStream(fieldName, reader);
Alexander Kurtakov 283abe4
+			return exactAnalyzer;
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
-		return pluggedInAnalyzer.tokenStream(fieldName, reader);
Alexander Kurtakov 283abe4
+		return pluggedInAnalyzer;
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 }
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/WordTokenStream.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/WordTokenStream.java
Alexander Kurtakov 283abe4
index 0b70cf7..79d5592 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/WordTokenStream.java
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/WordTokenStream.java
Alexander Kurtakov 283abe4
@@ -1,5 +1,5 @@
Alexander Kurtakov 283abe4
 /*******************************************************************************
Alexander Kurtakov 283abe4
- * Copyright (c) 2000, 2012 IBM Corporation and others.
Alexander Kurtakov 283abe4
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
Alexander Kurtakov 283abe4
  * All rights reserved. This program and the accompanying materials
Alexander Kurtakov 283abe4
  * are made available under the terms of the Eclipse Public License v1.0
Alexander Kurtakov 283abe4
  * which accompanies this distribution, and is available at
Alexander Kurtakov 283abe4
@@ -7,16 +7,18 @@
Alexander Kurtakov 283abe4
  *
Alexander Kurtakov 283abe4
  * Contributors:
Alexander Kurtakov 283abe4
  *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
+ *     Sopot Cela - Bug 466829 - Migration to Lucene 5
Alexander Kurtakov 283abe4
  *******************************************************************************/
Alexander Kurtakov 283abe4
 package org.eclipse.help.internal.search;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-import com.ibm.icu.text.BreakIterator;
Alexander Kurtakov 283abe4
 import java.io.IOException;
Alexander Kurtakov 283abe4
-import java.io.Reader;
Alexander Kurtakov 283abe4
 import java.util.Locale;
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
 import org.apache.lucene.analysis.TokenStream;
Alexander Kurtakov 283abe4
 import org.apache.lucene.analysis.Tokenizer;
Alexander Kurtakov 283abe4
 import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+import com.ibm.icu.text.BreakIterator;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 /**
Alexander Kurtakov 283abe4
  * WordTokenStream obtains tokens containing words appropriate for use with
Alexander Kurtakov 283abe4
@@ -24,7 +26,6 @@
Alexander Kurtakov 283abe4
  */
Alexander Kurtakov 283abe4
 public final class WordTokenStream extends Tokenizer {
Alexander Kurtakov 283abe4
 	private static final int BUF_LEN = 4096;
Alexander Kurtakov 283abe4
-	private final Reader reader;
Alexander Kurtakov 283abe4
 	private final BreakIterator boundary;
Alexander Kurtakov 283abe4
 	private StringBuffer strbuf;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
@@ -34,8 +35,8 @@
Alexander Kurtakov 283abe4
 	/**
Alexander Kurtakov 283abe4
 	 * Constructor
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
-	public WordTokenStream(String fieldName, Reader reader, Locale locale) {
Alexander Kurtakov 283abe4
-		this.reader = reader;
Alexander Kurtakov 283abe4
+	public WordTokenStream(Locale locale) {
Alexander Kurtakov 283abe4
+		super();
Alexander Kurtakov 283abe4
 		boundary = BreakIterator.getWordInstance(locale);
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
@@ -52,9 +53,9 @@
Alexander Kurtakov 283abe4
 	    if(strbuf == null) {
Alexander Kurtakov 283abe4
 			int available;
Alexander Kurtakov 283abe4
 			char[] cbuf = new char[BUF_LEN];
Alexander Kurtakov 283abe4
-			while ((available = reader.read(cbuf)) <= 0) {
Alexander Kurtakov 283abe4
+			while ((available = input.read(cbuf)) <= 0) {
Alexander Kurtakov 283abe4
 				if (available < 0) {
Alexander Kurtakov 283abe4
-					reader.close();
Alexander Kurtakov 283abe4
+					input.close();
Alexander Kurtakov 283abe4
 					return false;
Alexander Kurtakov 283abe4
 				}
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
@@ -62,7 +63,7 @@
Alexander Kurtakov 283abe4
 			strbuf.append(cbuf, 0, available);
Alexander Kurtakov 283abe4
 			// read more until white space (or EOF)
Alexander Kurtakov 283abe4
 			int c;
Alexander Kurtakov 283abe4
-			while (0 <= (c = reader.read())) {
Alexander Kurtakov 283abe4
+			while (0 <= (c = input.read())) {
Alexander Kurtakov 283abe4
 				strbuf.append((char) c);
Alexander Kurtakov 283abe4
 				if (c == ' ' || c == '\r' || c == '\n' || c == '\t') {
Alexander Kurtakov 283abe4
 					break;
Alexander Kurtakov 283abe4
@@ -70,7 +71,7 @@
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 			if (c < 0) {
Alexander Kurtakov 283abe4
-				reader.close();
Alexander Kurtakov 283abe4
+				input.close();
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 			boundary.setText(strbuf.toString());
Alexander Kurtakov 283abe4
@@ -105,9 +106,10 @@
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	public void close() throws IOException {
Alexander Kurtakov 283abe4
+		super.close();
Alexander Kurtakov 283abe4
 		/// Unlikely to be called as this is a reused
Alexander Kurtakov 283abe4
-	    if (this.reader != null) {
Alexander Kurtakov 283abe4
-	    	this.reader.close();
Alexander Kurtakov 283abe4
+	    if (this.input != null) {
Alexander Kurtakov 283abe4
+	    	this.input.close();
Alexander Kurtakov 283abe4
 	    }
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 }
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.help.webapp/web-archive/org.eclipse.help.infocenter-feature/feature.xml b/org.eclipse.help.webapp/web-archive/org.eclipse.help.infocenter-feature/feature.xml
Alexander Kurtakov 283abe4
index 8438100..174e92a 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.help.webapp/web-archive/org.eclipse.help.infocenter-feature/feature.xml
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.help.webapp/web-archive/org.eclipse.help.infocenter-feature/feature.xml
Alexander Kurtakov 283abe4
@@ -74,20 +74,6 @@
Alexander Kurtakov 283abe4
          unpack="false"/>
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
    
Alexander Kurtakov 283abe4
-         id="org.apache.lucene.analysis"
Alexander Kurtakov 283abe4
-         download-size="0"
Alexander Kurtakov 283abe4
-         install-size="0"
Alexander Kurtakov 283abe4
-         version="0.0.0"
Alexander Kurtakov 283abe4
-         unpack="false"/>
Alexander Kurtakov 283abe4
-         
Alexander Kurtakov 283abe4
-   
Alexander Kurtakov 283abe4
-         id="org.apache.lucene.core"
Alexander Kurtakov 283abe4
-         download-size="0"
Alexander Kurtakov 283abe4
-         install-size="0"
Alexander Kurtakov 283abe4
-         version="0.0.0"
Alexander Kurtakov 283abe4
-         unpack="false"/>
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
-   
Alexander Kurtakov 283abe4
          id="org.eclipse.core.contenttype"
Alexander Kurtakov 283abe4
          download-size="0"
Alexander Kurtakov 283abe4
          install-size="0"
Alexander Kurtakov 283abe4
@@ -227,4 +213,32 @@
Alexander Kurtakov 283abe4
          version="0.0.0"
Alexander Kurtakov 283abe4
          unpack="false"/>
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
+   
Alexander Kurtakov 283abe4
+         id="org.apache.lucene.analyzers-common"
Alexander Kurtakov 283abe4
+         download-size="0"
Alexander Kurtakov 283abe4
+         install-size="0"
Alexander Kurtakov 283abe4
+         version="0.0.0"
Alexander Kurtakov 283abe4
+         unpack="false"/>
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+   
Alexander Kurtakov 283abe4
+         id="org.apache.lucene.analyzers-smartcn"
Alexander Kurtakov 283abe4
+         download-size="0"
Alexander Kurtakov 283abe4
+         install-size="0"
Alexander Kurtakov 283abe4
+         version="0.0.0"
Alexander Kurtakov 283abe4
+         unpack="false"/>
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+   
Alexander Kurtakov 283abe4
+         id="org.apache.lucene.core"
Alexander Kurtakov 283abe4
+         download-size="0"
Alexander Kurtakov 283abe4
+         install-size="0"
Alexander Kurtakov 283abe4
+         version="0.0.0"
Alexander Kurtakov 283abe4
+         unpack="false"/>
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+   
Alexander Kurtakov 283abe4
+         id="org.apache.lucene.queryparser"
Alexander Kurtakov 283abe4
+         download-size="0"
Alexander Kurtakov 283abe4
+         install-size="0"
Alexander Kurtakov 283abe4
+         version="0.0.0"
Alexander Kurtakov 283abe4
+         unpack="false"/>
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
 </feature>
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.ua.tests/META-INF/MANIFEST.MF b/org.eclipse.ua.tests/META-INF/MANIFEST.MF
Alexander Kurtakov 283abe4
index 6bcf9bc..23f8910 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.ua.tests/META-INF/MANIFEST.MF
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.ua.tests/META-INF/MANIFEST.MF
Alexander Kurtakov 283abe4
@@ -19,14 +19,13 @@
Alexander Kurtakov 283abe4
  org.eclipse.ui.forms,
Alexander Kurtakov 283abe4
  org.eclipse.ui.browser;bundle-version="3.2.300",
Alexander Kurtakov 283abe4
  org.eclipse.equinox.jsp.jasper;bundle-version="1.0.200",
Alexander Kurtakov 283abe4
- org.eclipse.equinox.jsp.jasper.registry;bundle-version="1.0.100"
Alexander Kurtakov 283abe4
+ org.eclipse.equinox.jsp.jasper.registry;bundle-version="1.0.100",
Alexander Kurtakov 283abe4
+ org.apache.lucene.analyzers-common;bundle-version="5.1.0",
Alexander Kurtakov 283abe4
+ org.apache.lucene.core;bundle-version="5.1.0"
Alexander Kurtakov 283abe4
 Bundle-ActivationPolicy: lazy
Alexander Kurtakov 283abe4
 Bundle-Vendor: Eclipse.org
Alexander Kurtakov 283abe4
 Import-Package: javax.servlet;version="3.1.0",
Alexander Kurtakov 283abe4
- javax.servlet.http;version="3.1.0",
Alexander Kurtakov 283abe4
- org.apache.lucene.index;core=split;version="[3.5.0,4.0.0)",
Alexander Kurtakov 283abe4
- org.apache.lucene.search;core=split;version="[3.5.0,4.0.0)",
Alexander Kurtakov 283abe4
- org.apache.lucene.store;core=split;version="[3.5.0,4.0.0)"
Alexander Kurtakov 283abe4
+ javax.servlet.http;version="3.1.0"
Alexander Kurtakov 283abe4
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Alexander Kurtakov 283abe4
 Export-Package: org.eclipse.ua.tests,
Alexander Kurtakov 283abe4
  org.eclipse.ua.tests.browser,
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.ua.tests/data/help/searchindex/index291/write.lock b/org.eclipse.ua.tests/data/help/searchindex/index291/write.lock
Alexander Kurtakov 283abe4
new file mode 100644
Alexander Kurtakov 283abe4
index 0000000..e69de29
Alexander Kurtakov 283abe4
--- /dev/null
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.ua.tests/data/help/searchindex/index291/write.lock
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.ua.tests/data/help/searchindex/index510/_0.cfe b/org.eclipse.ua.tests/data/help/searchindex/index510/_0.cfe
Alexander Kurtakov 283abe4
new file mode 100644
Alexander Kurtakov 283abe4
index 0000000..09ec2c9
Alexander Kurtakov 283abe4
--- /dev/null
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.ua.tests/data/help/searchindex/index510/_0.cfe
Alexander Kurtakov 283abe4
Binary files differ
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.ua.tests/data/help/searchindex/index510/_0.cfs b/org.eclipse.ua.tests/data/help/searchindex/index510/_0.cfs
Alexander Kurtakov 283abe4
new file mode 100644
Alexander Kurtakov 283abe4
index 0000000..3aa288a
Alexander Kurtakov 283abe4
--- /dev/null
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.ua.tests/data/help/searchindex/index510/_0.cfs
Alexander Kurtakov 283abe4
Binary files differ
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.ua.tests/data/help/searchindex/index510/_0.si b/org.eclipse.ua.tests/data/help/searchindex/index510/_0.si
Alexander Kurtakov 283abe4
new file mode 100644
Alexander Kurtakov 283abe4
index 0000000..d897bfc
Alexander Kurtakov 283abe4
--- /dev/null
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.ua.tests/data/help/searchindex/index510/_0.si
Alexander Kurtakov 283abe4
Binary files differ
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.ua.tests/data/help/searchindex/index510/segments_1 b/org.eclipse.ua.tests/data/help/searchindex/index510/segments_1
Alexander Kurtakov 283abe4
new file mode 100644
Alexander Kurtakov 283abe4
index 0000000..4878901
Alexander Kurtakov 283abe4
--- /dev/null
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.ua.tests/data/help/searchindex/index510/segments_1
Alexander Kurtakov 283abe4
Binary files differ
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.ua.tests/data/help/searchindex/index510/write.lock b/org.eclipse.ua.tests/data/help/searchindex/index510/write.lock
Alexander Kurtakov 283abe4
new file mode 100644
Alexander Kurtakov 283abe4
index 0000000..e69de29
Alexander Kurtakov 283abe4
--- /dev/null
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.ua.tests/data/help/searchindex/index510/write.lock
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/search/EncodedCharacterSearch.java b/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/search/EncodedCharacterSearch.java
Alexander Kurtakov 283abe4
index 1dd4876..02b2e5b 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/search/EncodedCharacterSearch.java
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/search/EncodedCharacterSearch.java
Alexander Kurtakov 283abe4
@@ -7,6 +7,7 @@
Alexander Kurtakov 283abe4
  *
Alexander Kurtakov 283abe4
  * Contributors:
Alexander Kurtakov 283abe4
  *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
+ *     Sopot Cela - Bug 466829 - Migration to Lucene 5
Alexander Kurtakov 283abe4
  *******************************************************************************/
Alexander Kurtakov 283abe4
 package org.eclipse.ua.tests.help.search;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
@@ -43,7 +44,7 @@
Alexander Kurtakov 283abe4
     
Alexander Kurtakov 283abe4
     public void testUtf8Hebrew() {
Alexander Kurtakov 283abe4
     	SearchTestUtils.searchOneLocale("\u05D0\u05B7\u05E1\u05B0\u05D8\u05B0\u05E8\u05D5\u05B9\u05E0\u05D5\u05B9\u05DE" 
Alexander Kurtakov 283abe4
-    			                         + "\u05B0\u05D9\u05B8\u05D4) \u05DC\u05B4\u05E7\u05BC\u05D5\u05BC\u05D9 (\u05D9\u05E8\u05D7 \u05D0\u05D5 \u05E9\u05DE\u05E9", new String[] {"/org.eclipse.ua.tests/data/help/search/testnlUTF8.htm" }, "en");   	   
Alexander Kurtakov 283abe4
+    			                         + "\u05B0\u05D9\u05B8\u05D4\\) \u05DC\u05B4\u05E7\u05BC\u05D5\u05BC\u05D9 \\(\u05D9\u05E8\u05D7 \u05D0\u05D5 \u05E9\u05DE\u05E9", new String[] {"/org.eclipse.ua.tests/data/help/search/testnlUTF8.htm" }, "en");   	   
Alexander Kurtakov 283abe4
     }
Alexander Kurtakov 283abe4
     
Alexander Kurtakov 283abe4
     
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/search/PrebuiltIndexCompatibility.java b/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/search/PrebuiltIndexCompatibility.java
Alexander Kurtakov 283abe4
index 640d4c9..33ae5ba 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/search/PrebuiltIndexCompatibility.java
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/search/PrebuiltIndexCompatibility.java
Alexander Kurtakov 283abe4
@@ -8,6 +8,7 @@
Alexander Kurtakov 283abe4
  * Contributors:
Alexander Kurtakov 283abe4
  *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
  *     Alexander Kurtakov - Bug 460787
Alexander Kurtakov 283abe4
+ *     Sopot Cela - Bug 466829 - Migration to Lucene 5
Alexander Kurtakov 283abe4
  *******************************************************************************/
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 package org.eclipse.ua.tests.help.search;
Alexander Kurtakov 283abe4
@@ -15,43 +16,38 @@
Alexander Kurtakov 283abe4
 import java.io.File;
Alexander Kurtakov 283abe4
 import java.io.IOException;
Alexander Kurtakov 283abe4
 import java.net.URL;
Alexander Kurtakov 283abe4
-import java.util.ArrayList;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-import junit.framework.Test;
Alexander Kurtakov 283abe4
-import junit.framework.TestCase;
Alexander Kurtakov 283abe4
-import junit.framework.TestSuite;
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
-import org.osgi.framework.Bundle;
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
Alexander Kurtakov 283abe4
 import org.apache.lucene.index.CorruptIndexException;
Alexander Kurtakov 283abe4
-import org.apache.lucene.index.IndexReader;
Alexander Kurtakov 283abe4
+import org.apache.lucene.index.DirectoryReader;
Alexander Kurtakov 283abe4
 import org.apache.lucene.search.IndexSearcher;
Alexander Kurtakov 283abe4
 import org.apache.lucene.search.Query;
Alexander Kurtakov 283abe4
 import org.apache.lucene.search.TopDocs;
Alexander Kurtakov 283abe4
 import org.apache.lucene.store.Directory;
Alexander Kurtakov 283abe4
 import org.apache.lucene.store.NIOFSDirectory;
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
-import org.eclipse.help.internal.base.BaseHelpSystem;
Alexander Kurtakov 283abe4
-import org.eclipse.help.internal.search.AnalyzerDescriptor;
Alexander Kurtakov 283abe4
-import org.eclipse.help.internal.search.PluginIndex;
Alexander Kurtakov 283abe4
-import org.eclipse.help.internal.search.QueryBuilder;
Alexander Kurtakov 283abe4
-import org.eclipse.help.internal.search.SearchIndexWithIndexingProgress;
Alexander Kurtakov 283abe4
-import org.eclipse.ua.tests.plugin.UserAssistanceTestPlugin;
Alexander Kurtakov 283abe4
-
Alexander Kurtakov 283abe4
+import org.apache.lucene.util.QueryBuilder;
Alexander Kurtakov 283abe4
 import org.eclipse.core.runtime.FileLocator;
Alexander Kurtakov 283abe4
 import org.eclipse.core.runtime.NullProgressMonitor;
Alexander Kurtakov 283abe4
 import org.eclipse.core.runtime.Path;
Alexander Kurtakov 283abe4
+import org.eclipse.help.internal.base.BaseHelpSystem;
Alexander Kurtakov 283abe4
+import org.eclipse.help.internal.search.PluginIndex;
Alexander Kurtakov 283abe4
+import org.eclipse.help.internal.search.SearchIndexWithIndexingProgress;
Alexander Kurtakov 283abe4
+import org.eclipse.ua.tests.plugin.UserAssistanceTestPlugin;
Alexander Kurtakov 283abe4
+import org.osgi.framework.Bundle;
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
+import junit.framework.Test;
Alexander Kurtakov 283abe4
+import junit.framework.TestCase;
Alexander Kurtakov 283abe4
+import junit.framework.TestSuite;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 /**
Alexander Kurtakov 283abe4
- * Verify that older versions of the index can be read by this
Alexander Kurtakov 283abe4
- * version of Eclipse. 
Alexander Kurtakov 283abe4
+ * Verify that older versions of the index can be read by this version of
Alexander Kurtakov 283abe4
+ * Eclipse.
Alexander Kurtakov 283abe4
  * 
Alexander Kurtakov 283abe4
- * How to maintain this test - if when upgrading to a new version
Alexander Kurtakov 283abe4
- * of Lucene one of the IndexReadable tests fails you need to
Alexander Kurtakov 283abe4
- * make the following changes:
Alexander Kurtakov 283abe4
- * 1. Change the corresponding Compatible() test to expect a result of false
Alexander Kurtakov 283abe4
- * 2. Comment out the failing test
Alexander Kurtakov 283abe4
- * 3. Change the help system to recognize that version of Lucene as being incompatible
Alexander Kurtakov 283abe4
+ * How to maintain this test - if when upgrading to a new version of Lucene one
Alexander Kurtakov 283abe4
+ * of the IndexReadable tests fails you need to make the following changes: 1.
Alexander Kurtakov 283abe4
+ * Change the corresponding Compatible() test to expect a result of false 2.
Alexander Kurtakov 283abe4
+ * Comment out the failing test 3. Change the help system to recognize that
Alexander Kurtakov 283abe4
+ * version of Lucene as being incompatible
Alexander Kurtakov 283abe4
  */
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 public class PrebuiltIndexCompatibility extends TestCase {
Alexander Kurtakov 283abe4
@@ -64,48 +60,33 @@
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	/**
Alexander Kurtakov 283abe4
-	 * Test index built with Lucene 1.9.1
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	public void test1_9_1_IndexReadable() throws Exception {
Alexander Kurtakov 283abe4
-		checkReadable("data/help/searchindex/index191");
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
-	 * Test index built with Lucene 2.9.1
Alexander Kurtakov 283abe4
-	 */
Alexander Kurtakov 283abe4
-	public void test2_9_1_IndexReadable() throws Exception {
Alexander Kurtakov 283abe4
-		checkReadable("data/help/searchindex/index291");
Alexander Kurtakov 283abe4
-	}
Alexander Kurtakov 283abe4
-	
Alexander Kurtakov 283abe4
-	/**
Alexander Kurtakov 283abe4
 	 ** Test compatibility of Lucene 1.9.1 index with current Lucene
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
-	public void test1_9_1Compatible()
Alexander Kurtakov 283abe4
-	{
Alexander Kurtakov 283abe4
-		checkCompatible("data/help/searchindex/index191", true);
Alexander Kurtakov 283abe4
+	public void test1_9_1Compatible() {
Alexander Kurtakov 283abe4
+		checkCompatible("data/help/searchindex/index191", false);
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
-	
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
 	/**
Alexander Kurtakov 283abe4
 	 ** Test compatibility of Lucene 2.9.1 index with current Lucene
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
-	public void test2_9_1Compatible()
Alexander Kurtakov 283abe4
-	{
Alexander Kurtakov 283abe4
-		checkCompatible("data/help/searchindex/index291", true);
Alexander Kurtakov 283abe4
+	public void test2_9_1Compatible() {
Alexander Kurtakov 283abe4
+		checkCompatible("data/help/searchindex/index291", false);
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-	public void test1_9_1LuceneCompatible()
Alexander Kurtakov 283abe4
-	{
Alexander Kurtakov 283abe4
-		checkLuceneCompatible("1.9.1", true);
Alexander Kurtakov 283abe4
+	public void test1_9_1LuceneCompatible() {
Alexander Kurtakov 283abe4
+		checkLuceneCompatible("1.9.1", false);
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-	public void test1_4_103NotLuceneCompatible()
Alexander Kurtakov 283abe4
-	{
Alexander Kurtakov 283abe4
+	public void test1_4_103NotLuceneCompatible() {
Alexander Kurtakov 283abe4
 		checkLuceneCompatible("1.4.103", false);
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-	public void test2_9_1LuceneCompatible()
Alexander Kurtakov 283abe4
-	{
Alexander Kurtakov 283abe4
-		checkLuceneCompatible("2.9.1", true);
Alexander Kurtakov 283abe4
+	public void test2_9_1LuceneCompatible() {
Alexander Kurtakov 283abe4
+		checkLuceneCompatible("2.9.1", false);
Alexander Kurtakov 283abe4
+	}
Alexander Kurtakov 283abe4
+	
Alexander Kurtakov 283abe4
+	public void test5_1_0LuceneCompatible() {
Alexander Kurtakov 283abe4
+		checkLuceneCompatible("5.1.0", true);
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	public void testPluginIndexEqualToItself() {
Alexander Kurtakov 283abe4
@@ -114,52 +95,59 @@
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	/**
Alexander Kurtakov 283abe4
-	 * Verify that if the paths and plugins are the same two PluginIndex objects are equal
Alexander Kurtakov 283abe4
+	 * Verify that if the paths and plugins are the same two PluginIndex objects
Alexander Kurtakov 283abe4
+	 * are equal
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
 	public void testPluginIndexEquality() {
Alexander Kurtakov 283abe4
-		PluginIndex index1a = createPluginIndex("data/help/searchindex/index191");
Alexander Kurtakov 283abe4
-		PluginIndex index1b = createPluginIndex("data/help/searchindex/index191");
Alexander Kurtakov 283abe4
+		PluginIndex index1a = createPluginIndex("data/help/searchindex/index510");
Alexander Kurtakov 283abe4
+		PluginIndex index1b = createPluginIndex("data/help/searchindex/index510");
Alexander Kurtakov 283abe4
 		assertTrue(index1a.equals(index1b));
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
-	
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
 	/**
Alexander Kurtakov 283abe4
-	 * Verify that if the paths and plugins are the same two PluginIndex objects are equal
Alexander Kurtakov 283abe4
+	 * Verify that if the paths and plugins are the same two PluginIndex objects
Alexander Kurtakov 283abe4
+	 * are equal
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
 	public void testPluginIndexHash() {
Alexander Kurtakov 283abe4
 		PluginIndex index1a = createPluginIndex("data/help/searchindex/index191");
Alexander Kurtakov 283abe4
 		PluginIndex index1b = createPluginIndex("data/help/searchindex/index191");
Alexander Kurtakov 283abe4
 		assertEquals(index1a.hashCode(), index1b.hashCode());
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
-	
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
 	/**
Alexander Kurtakov 283abe4
-	 * Verify that if the paths are different two PluginIndex objects are not equal
Alexander Kurtakov 283abe4
+	 * Verify that if the paths are different two PluginIndex objects are not
Alexander Kurtakov 283abe4
+	 * equal
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
 	public void testPluginIndexInequality() {
Alexander Kurtakov 283abe4
 		PluginIndex index1 = createPluginIndex("data/help/searchindex/index191");
Alexander Kurtakov 283abe4
 		PluginIndex index2 = createPluginIndex("data/help/searchindex/index291");
Alexander Kurtakov 283abe4
 		assertFalse(index1.equals(index2));
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
+	
Alexander Kurtakov 283abe4
+	public void test5_1_0IndexReadable() throws CorruptIndexException, IOException {
Alexander Kurtakov 283abe4
+		checkReadable("data/help/searchindex/index510");
Alexander Kurtakov 283abe4
+	}
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
-    /*
Alexander Kurtakov 283abe4
-     * Verifies that a prebuilt index can be searched
Alexander Kurtakov 283abe4
-     */
Alexander Kurtakov 283abe4
-	private void checkReadable(String indexPath) throws IOException,
Alexander Kurtakov 283abe4
-			CorruptIndexException {
Alexander Kurtakov 283abe4
+	/*
Alexander Kurtakov 283abe4
+	 * Verifies that a prebuilt index can be searched
Alexander Kurtakov 283abe4
+	 */
Alexander Kurtakov 283abe4
+	private void checkReadable(String indexPath) throws IOException, CorruptIndexException {
Alexander Kurtakov 283abe4
 		Path path = new Path(indexPath);
Alexander Kurtakov 283abe4
-		Bundle bundle = UserAssistanceTestPlugin.getDefault().getBundle(); 
Alexander Kurtakov 283abe4
+		Bundle bundle = UserAssistanceTestPlugin.getDefault().getBundle();
Alexander Kurtakov 283abe4
 		URL url = FileLocator.find(bundle, path, null);
Alexander Kurtakov 283abe4
 		URL resolved = FileLocator.resolve(url);
Alexander Kurtakov 283abe4
 		if ("file".equals(resolved.getProtocol())) { //$NON-NLS-1$
Alexander Kurtakov 283abe4
 			String filePath = resolved.getFile();
Alexander Kurtakov 283abe4
-			QueryBuilder queryBuilder = new QueryBuilder("eclipse", new AnalyzerDescriptor("en-us"));
Alexander Kurtakov 283abe4
-			Query luceneQuery = queryBuilder.getLuceneQuery(new ArrayList<String>() , false);
Alexander Kurtakov 283abe4
+			StandardAnalyzer standardAnalyzer = new StandardAnalyzer();
Alexander Kurtakov 283abe4
+			QueryBuilder builder = new QueryBuilder(standardAnalyzer);
Alexander Kurtakov 283abe4
+			Query luceneQuery = builder.createBooleanQuery("contents", "eclipse");
Alexander Kurtakov 283abe4
 			Directory luceneDirectory = null;
Alexander Kurtakov 283abe4
 			IndexSearcher searcher = null;
Alexander Kurtakov 283abe4
 			try {
Alexander Kurtakov 283abe4
-				luceneDirectory = new NIOFSDirectory(new File(filePath));
Alexander Kurtakov 283abe4
-				searcher = new IndexSearcher(IndexReader.open(luceneDirectory, true));
Alexander Kurtakov 283abe4
+				luceneDirectory = new NIOFSDirectory(new File(filePath).toPath());
Alexander Kurtakov 283abe4
+				searcher = new IndexSearcher(DirectoryReader.open(luceneDirectory));
Alexander Kurtakov 283abe4
 				TopDocs hits = searcher.search(luceneQuery, 500);
Alexander Kurtakov 283abe4
-				assertEquals(hits.totalHits, 1);
Alexander Kurtakov 283abe4
+				assertEquals(1, hits.totalHits );
Alexander Kurtakov 283abe4
 			} finally {
Alexander Kurtakov 283abe4
 				if (luceneDirectory != null)
Alexander Kurtakov 283abe4
 					try {
Alexander Kurtakov 283abe4
@@ -167,13 +155,13 @@
Alexander Kurtakov 283abe4
 					} catch (IOException x) {
Alexander Kurtakov 283abe4
 					}
Alexander Kurtakov 283abe4
 				if (searcher != null)
Alexander Kurtakov 283abe4
-					searcher.close();
Alexander Kurtakov 283abe4
+					searcher.getIndexReader().close();
Alexander Kurtakov 283abe4
 			}
Alexander Kurtakov 283abe4
 		} else {
Alexander Kurtakov 283abe4
 			fail("Cannot resolve to file protocol");
Alexander Kurtakov 283abe4
 		}
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
-	
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
 	/*
Alexander Kurtakov 283abe4
 	 * Tests the isCompatible method in PluginIndex
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
@@ -186,22 +174,20 @@
Alexander Kurtakov 283abe4
 	public PluginIndex createPluginIndex(String versionDirectory) {
Alexander Kurtakov 283abe4
 		PluginIndex pluginIndex;
Alexander Kurtakov 283abe4
 		SearchIndexWithIndexingProgress index = BaseHelpSystem.getLocalSearchManager().getIndex("en_us".toString());
Alexander Kurtakov 283abe4
-		BaseHelpSystem.getLocalSearchManager().ensureIndexUpdated(
Alexander Kurtakov 283abe4
-				new NullProgressMonitor(),
Alexander Kurtakov 283abe4
-				index);
Alexander Kurtakov 283abe4
+		BaseHelpSystem.getLocalSearchManager().ensureIndexUpdated(new NullProgressMonitor(), index);
Alexander Kurtakov 283abe4
 		pluginIndex = new PluginIndex("org.eclipse.ua.tests", "data/help/searchindex/" + versionDirectory, index);
Alexander Kurtakov 283abe4
 		return pluginIndex;
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
-	
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
 	/*
Alexander Kurtakov 283abe4
-	 * Tests the isLuceneCompatible method in SearchIndex 
Alexander Kurtakov 283abe4
+	 * Tests the isLuceneCompatible method in SearchIndex
Alexander Kurtakov 283abe4
 	 */
Alexander Kurtakov 283abe4
 	private void checkLuceneCompatible(String version, boolean expected) {
Alexander Kurtakov 283abe4
 		SearchIndexWithIndexingProgress index = BaseHelpSystem.getLocalSearchManager().getIndex("en_us".toString());
Alexander Kurtakov 283abe4
-		BaseHelpSystem.getLocalSearchManager().ensureIndexUpdated(
Alexander Kurtakov 283abe4
-				new NullProgressMonitor(),
Alexander Kurtakov 283abe4
-				index);
Alexander Kurtakov 283abe4
+		BaseHelpSystem.getLocalSearchManager().ensureIndexUpdated(new NullProgressMonitor(), index);
Alexander Kurtakov 283abe4
 		assertEquals(expected, index.isLuceneCompatible(version));
Alexander Kurtakov 283abe4
 	}
Alexander Kurtakov 283abe4
 	
Alexander Kurtakov 283abe4
+	
Alexander Kurtakov 283abe4
+
Alexander Kurtakov 283abe4
 }
8fcf627
diff --git a/eclipse.platform.ua/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/search/SearchParticipantTest.java b/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/search/SearchParticipantTest.java
Alexander Kurtakov 283abe4
index 223e42a..2e782c3 100644
8fcf627
--- a/eclipse.platform.ua/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/search/SearchParticipantTest.java
8fcf627
+++ b/eclipse.platform.ua/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/search/SearchParticipantTest.java
Alexander Kurtakov 283abe4
@@ -1,5 +1,5 @@
Alexander Kurtakov 283abe4
 /*******************************************************************************
Alexander Kurtakov 283abe4
- * Copyright (c) 2010 IBM Corporation and others.
Alexander Kurtakov 283abe4
+ * Copyright (c) 2010, 2015 IBM Corporation and others.
Alexander Kurtakov 283abe4
  * All rights reserved. This program and the accompanying materials
Alexander Kurtakov 283abe4
  * are made available under the terms of the Eclipse Public License v1.0
Alexander Kurtakov 283abe4
  * which accompanies this distribution, and is available at
Alexander Kurtakov 283abe4
@@ -7,6 +7,7 @@
Alexander Kurtakov 283abe4
  *
Alexander Kurtakov 283abe4
  * Contributors:
Alexander Kurtakov 283abe4
  *     IBM Corporation - initial API and implementation
Alexander Kurtakov 283abe4
+ *     Sopot Cela - Bug 466829 - Migration to Lucene 5
Alexander Kurtakov 283abe4
  *******************************************************************************/
Alexander Kurtakov 283abe4
 package org.eclipse.ua.tests.help.search;
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
@@ -40,7 +41,7 @@
Alexander Kurtakov 283abe4
 	}	
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	public void testSearchUsingAndInSeparateDocs() {
Alexander Kurtakov 283abe4
-		SearchTestUtils.searchAllLocales("jduehdye and olhoykk", new String[0]);
Alexander Kurtakov 283abe4
+		SearchTestUtils.searchAllLocales("jduehdye AND olhoykk", new String[0]);
Alexander Kurtakov 283abe4
 	}	
Alexander Kurtakov 283abe4
 
Alexander Kurtakov 283abe4
 	public void testSearchExactMatch() {
8fcf627
--- a/eclipse.platform.common/bundles/org.eclipse.platform.doc.isv/pom.xml
8fcf627
+++ b/eclipse.platform.common/bundles/org.eclipse.platform.doc.isv/pom.xml
8fcf627
@@ -101,7 +101,7 @@
8fcf627
                   </requirement>
8fcf627
                   <requirement>
8fcf627
                     <type>eclipse-plugin</type>
8fcf627
-                    <id>org.apache.lucene.analysis</id>
8fcf627
+                    <id>org.apache.lucene.analyzers-common</id>
8fcf627
                     <versionRange>0.0.0</versionRange>
8fcf627
                   </requirement>
8fcf627
                   <requirement>