8ee4213
diff --git a/org.eclipse.mylyn.tasks.index.core/META-INF/MANIFEST.MF b/org.eclipse.mylyn.tasks.index.core/META-INF/MANIFEST.MF
8ee4213
index 44080b1..962ff79 100644
bb6e17f
--- org.eclipse.mylyn.tasks.index.core/META-INF/MANIFEST.MF
bb6e17f
+++ org.eclipse.mylyn.tasks.index.core/META-INF/MANIFEST.MF
8ee4213
@@ -7,7 +7,9 @@ Bundle-Vendor: %Bundle-Vendor
8ee4213
 Require-Bundle: org.eclipse.core.runtime,
8ee4213
  org.eclipse.mylyn.tasks.core;bundle-version="3.8.0",
8ee4213
  org.eclipse.mylyn.commons.core;bundle-version="3.8.0",
8ee4213
- org.apache.lucene.core;bundle-version="[2.9.1,3.7.0)"
8ee4213
+ org.apache.lucene.core;bundle-version="[4.0.0,5.0.0)",
8ee4213
+ org.apache.lucene.queryparser;bundle-version="[4.0.0,5.0.0)",
8ee4213
+ org.apache.lucene.analysis;bundle-version="[4.0.0,5.0.0)"
8ee4213
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
8ee4213
 Bundle-ActivationPolicy: lazy
8ee4213
 Export-Package: org.eclipse.mylyn.internal.tasks.index.core;x-internal:=true
8ee4213
diff --git a/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskAnalyzer.java b/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskAnalyzer.java
8ee4213
index b1b88c1..1cbf72c 100644
bb6e17f
--- org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskAnalyzer.java
bb6e17f
+++ org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskAnalyzer.java
8ee4213
@@ -11,8 +11,12 @@
8ee4213
  *******************************************************************************/
8ee4213
 package org.eclipse.mylyn.internal.tasks.index.core;
8ee4213
 
8ee4213
-import org.apache.lucene.analysis.KeywordAnalyzer;
8ee4213
-import org.apache.lucene.analysis.PerFieldAnalyzerWrapper;
8ee4213
+import java.util.HashMap;
8ee4213
+import java.util.Map;
8ee4213
+
8ee4213
+import org.apache.lucene.analysis.Analyzer;
8ee4213
+import org.apache.lucene.analysis.core.KeywordAnalyzer;
8ee4213
+import org.apache.lucene.analysis.miscellaneous.PerFieldAnalyzerWrapper;
8ee4213
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
8ee4213
 import org.apache.lucene.util.Version;
8ee4213
 
8ee4213
@@ -24,10 +28,12 @@ import org.apache.lucene.util.Version;
8ee4213
 class TaskAnalyzer {
8ee4213
 
8ee4213
 	public static PerFieldAnalyzerWrapper instance() {
8ee4213
-		PerFieldAnalyzerWrapper wrapper = new PerFieldAnalyzerWrapper(new StandardAnalyzer(Version.LUCENE_CURRENT));
8ee4213
-		wrapper.addAnalyzer(TaskListIndex.FIELD_IDENTIFIER.getIndexKey(), new KeywordAnalyzer());
8ee4213
-		wrapper.addAnalyzer(TaskListIndex.FIELD_TASK_KEY.getIndexKey(), new KeywordAnalyzer());
8ee4213
-		wrapper.addAnalyzer(TaskListIndex.FIELD_REPOSITORY_URL.getIndexKey(), new KeywordAnalyzer());
8ee4213
+		Map<String, Analyzer> analyzerPerField = new HashMap<String, Analyzer>();
8ee4213
+		analyzerPerField.put(TaskListIndex.FIELD_IDENTIFIER.getIndexKey(), new KeywordAnalyzer());
8ee4213
+		analyzerPerField.put(TaskListIndex.FIELD_TASK_KEY.getIndexKey(), new KeywordAnalyzer());
8ee4213
+		analyzerPerField.put(TaskListIndex.FIELD_REPOSITORY_URL.getIndexKey(), new KeywordAnalyzer());
8ee4213
+		PerFieldAnalyzerWrapper wrapper = new PerFieldAnalyzerWrapper(new StandardAnalyzer(Version.LUCENE_CURRENT),
8ee4213
+				analyzerPerField);
8ee4213
 		return wrapper;
8ee4213
 	}
8ee4213
 }
bb6e17f
--- org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskListIndex.java.sav	2014-03-28 12:12:59.000000000 +0200
bb6e17f
+++ org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskListIndex.java	2014-03-31 14:52:27.320005081 +0300
bb6e17f
@@ -38,12 +38,16 @@ import org.apache.lucene.document.DateTo
8ee4213
 import org.apache.lucene.document.Document;
8ee4213
 import org.apache.lucene.document.Field;
8ee4213
 import org.apache.lucene.document.Field.Store;
8ee4213
+import org.apache.lucene.document.StringField;
8ee4213
 import org.apache.lucene.index.CorruptIndexException;
8ee4213
+import org.apache.lucene.index.DirectoryReader;
8ee4213
 import org.apache.lucene.index.IndexReader;
8ee4213
 import org.apache.lucene.index.IndexWriter;
8ee4213
+import org.apache.lucene.index.IndexWriterConfig;
8ee4213
+import org.apache.lucene.index.IndexableField;
8ee4213
 import org.apache.lucene.index.Term;
8ee4213
-import org.apache.lucene.queryParser.ParseException;
8ee4213
-import org.apache.lucene.queryParser.QueryParser;
8ee4213
+import org.apache.lucene.queryparser.classic.ParseException;
8ee4213
+import org.apache.lucene.queryparser.classic.QueryParser;
8ee4213
 import org.apache.lucene.search.BooleanClause;
8ee4213
 import org.apache.lucene.search.BooleanClause.Occur;
8ee4213
 import org.apache.lucene.search.BooleanQuery;
bb6e17f
@@ -591,12 +595,6 @@ public class TaskListIndex implements IT
8ee4213
 					} catch (IOException e) {
8ee4213
 						StatusHandler.log(new Status(IStatus.ERROR, TasksIndexCore.ID_PLUGIN,
8ee4213
 								"Unexpected failure within task list index", e)); //$NON-NLS-1$
8ee4213
-					} finally {
8ee4213
-						try {
8ee4213
-							indexSearcher.close();
8ee4213
-						} catch (IOException e) {
8ee4213
-							// ignore
8ee4213
-						}
8ee4213
 					}
8ee4213
 
8ee4213
 				} else {
bb6e17f
@@ -674,12 +672,6 @@ public class TaskListIndex implements IT
8ee4213
 				} catch (IOException e) {
8ee4213
 					StatusHandler.log(new Status(IStatus.ERROR, TasksIndexCore.ID_PLUGIN,
8ee4213
 							"Unexpected failure within task list index", e)); //$NON-NLS-1$
8ee4213
-				} finally {
8ee4213
-					try {
8ee4213
-						indexSearcher.close();
8ee4213
-					} catch (IOException e) {
8ee4213
-						// ignore
8ee4213
-					}
8ee4213
 				}
8ee4213
 			}
8ee4213
 		} finally {
bb6e17f
@@ -769,7 +761,7 @@ public class TaskListIndex implements IT
8ee4213
 		try {
8ee4213
 			synchronized (this) {
8ee4213
 				if (indexReader == null) {
8ee4213
-					indexReader = IndexReader.open(directory, true);
8ee4213
+					indexReader = DirectoryReader.open(directory);
8ee4213
 					lastResults = null;
8ee4213
 				}
8ee4213
 				return indexReader;
bb6e17f
@@ -983,7 +975,7 @@ public class TaskListIndex implements IT
8ee4213
 		if (value == null) {
8ee4213
 			return;
8ee4213
 		}
8ee4213
-		Field field = document.getField(indexField.getIndexKey());
8ee4213
+		IndexableField field = document.getField(indexField.getIndexKey());
8ee4213
 		if (field == null) {
8ee4213
 			field = new Field(indexField.getIndexKey(), value, Store.YES,
8ee4213
 					org.apache.lucene.document.Field.Index.ANALYZED);
bb6e17f
@@ -991,7 +983,7 @@ public class TaskListIndex implements IT
8ee4213
 		} else {
8ee4213
 			String existingValue = field.stringValue();
8ee4213
 			if (!indexField.equals(FIELD_PERSON) || !existingValue.contains(value)) {
8ee4213
-				field.setValue(existingValue + " " + value); //$NON-NLS-1$
8ee4213
+				document.add(new StringField(field.name(), existingValue + " " + value, Store.YES)); //$NON-NLS-1$
8ee4213
 			}
8ee4213
 		}
8ee4213
 	}
bb6e17f
@@ -1004,13 +996,13 @@ public class TaskListIndex implements IT
8ee4213
 		// move the date by the GMT offset if there is any
8ee4213
 
8ee4213
 		String value = DateTools.dateToString(date, Resolution.HOUR);
8ee4213
-		Field field = document.getField(indexField.getIndexKey());
8ee4213
+		IndexableField field = document.getField(indexField.getIndexKey());
8ee4213
 		if (field == null) {
8ee4213
 			field = new Field(indexField.getIndexKey(), value, Store.YES,
8ee4213
 					org.apache.lucene.document.Field.Index.ANALYZED);
8ee4213
 			document.add(field);
8ee4213
 		} else {
8ee4213
-			field.setValue(value);
8ee4213
+			document.add(new StringField(field.name(), value, Store.YES));
8ee4213
 		}
8ee4213
 	}
8ee4213
 
bb6e17f
@@ -1069,7 +1061,7 @@ public class TaskListIndex implements IT
8ee4213
 			try {
8ee4213
 				if (!rebuildIndex) {
8ee4213
 					try {
8ee4213
-						IndexReader reader = IndexReader.open(directory, false);
8ee4213
+						IndexReader reader = DirectoryReader.open(directory);
8ee4213
 						reader.close();
8ee4213
 					} catch (CorruptIndexException e) {
8ee4213
 						rebuildIndex = true;
bb6e17f
@@ -1216,7 +1208,7 @@ public class TaskListIndex implements IT
bb6e17f
 				writer = createIndexWriter(true);
bb6e17f
 			} catch (CorruptIndexException e) {
bb6e17f
 				if (directory instanceof FSDirectory) {
bb6e17f
-					cleanDirectory(((FSDirectory) directory).getFile());
bb6e17f
+					cleanDirectory(((FSDirectory) directory).getDirectory());
bb6e17f
 					writer = createIndexWriter(true);
bb6e17f
 				} else {
bb6e17f
 					throw e;
bb6e17f
@@ -1264,7 +1256,7 @@ public class TaskListIndex implements IT
8ee4213
 
bb6e17f
 	protected IndexWriter createIndexWriter(boolean create) throws CorruptIndexException, LockObtainFailedException,
bb6e17f
 			IOException {
bb6e17f
-		return new IndexWriter(directory, TaskAnalyzer.instance(), create, IndexWriter.MaxFieldLength.UNLIMITED);
bb6e17f
+		return new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_CURRENT,	TaskAnalyzer.instance()));
bb6e17f
 	}
8ee4213
 
bb6e17f
 	/**