diff --git a/src/main/java/org/olat/modules/qpool/manager/QuestionItemDocumentFactory.java b/src/main/java/org/olat/modules/qpool/manager/QuestionItemDocumentFactory.java
index 99494efc12d03866f50d983c41ee27a982cad571..3a17d286e35e6c9b165424b44c01d2b16d475209 100644
--- a/src/main/java/org/olat/modules/qpool/manager/QuestionItemDocumentFactory.java
+++ b/src/main/java/org/olat/modules/qpool/manager/QuestionItemDocumentFactory.java
@@ -39,6 +39,7 @@ import org.olat.modules.qpool.QuestionItemFull;
 import org.olat.modules.qpool.QuestionPoolModule;
 import org.olat.modules.qpool.model.QItemDocument;
 import org.olat.modules.qpool.model.QuestionItemImpl;
+import org.olat.modules.taxonomy.TaxonomyLevel;
 import org.olat.resource.OLATResource;
 import org.olat.search.model.AbstractOlatDocument;
 import org.olat.search.model.OlatDocument;
@@ -183,7 +184,7 @@ public class QuestionItemDocumentFactory {
 			if(StringHelper.containsNonWhitespace(path)) {
 				for(StringTokenizer tokenizer = new StringTokenizer(path, "/"); tokenizer.hasMoreTokens(); ) {
 					String nextToken = tokenizer.nextToken();
-					document.add(new TextField(QItemDocument.TAXONOMIC_PATH_FIELD, nextToken, Field.Store.NO));
+					document.add(new TextField(QItemDocument.TAXONOMIC_IDENTIFIER_FIELD, nextToken, Field.Store.NO));
 				}
 				if(item instanceof QuestionItemImpl) {
 					Long key = ((QuestionItemImpl)item).getTaxonomyLevel().getKey();
@@ -193,6 +194,12 @@ public class QuestionItemDocumentFactory {
 					document.add(field);
 				}
 			}
+			TaxonomyLevel taxonomyLevel = item.getTaxonomyLevel();
+			if (taxonomyLevel != null) {
+				String materializedPathKeys = taxonomyLevel.getMaterializedPathKeys().replaceAll(" ", "_").replaceAll("/", "_");
+				TextField field = new TextField(QItemDocument.TAXONOMIC_PATH_FIELD, materializedPathKeys, Field.Store.YES);
+				document.add(field);
+			}
 		}
 		return document;
 	}
diff --git a/src/main/java/org/olat/modules/qpool/model/QItemDocument.java b/src/main/java/org/olat/modules/qpool/model/QItemDocument.java
index 44706e558f787f4d190a1759616bb73c971aad8e..585af4cf2ff4a6f46f1bac4404e18e40a239e138 100644
--- a/src/main/java/org/olat/modules/qpool/model/QItemDocument.java
+++ b/src/main/java/org/olat/modules/qpool/model/QItemDocument.java
@@ -36,8 +36,8 @@ public class QItemDocument extends OlatDocument {
 	public static final String SHARE_FIELD = "share";
 	public static final String POOL_FIELD = "pool";
 	public static final String TAXONOMIC_FIELD = "taxonomyid";
-	public static final String TAXONOMIC_PATH_FIELD = "taxonomy";
-	
+	public static final String TAXONOMIC_PATH_FIELD = "taxonomy";       // used in advanced search (subjects)
+	public static final String TAXONOMIC_IDENTIFIER_FIELD = "taxonomy"; // used in full text search field
 
 	public static final String IDENTIFIER_FIELD = "identifier";
 	public static final String MASTER_IDENTIFIER_FIELD = "master";
diff --git a/src/main/java/org/olat/modules/qpool/ui/metadata/ExtendedSearchController.java b/src/main/java/org/olat/modules/qpool/ui/metadata/ExtendedSearchController.java
index 5b385c0c7050ea1e15cac4c289548e2e58a2a307..83160bd4b433d89555ab27a173eb4918727c1a8f 100644
--- a/src/main/java/org/olat/modules/qpool/ui/metadata/ExtendedSearchController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/metadata/ExtendedSearchController.java
@@ -22,8 +22,6 @@ package org.olat.modules.qpool.ui.metadata;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 import org.olat.core.commons.services.license.LicenseModule;
 import org.olat.core.commons.services.license.ui.LicenseSelectionConfig;
@@ -434,21 +432,15 @@ public class ExtendedSearchController extends FormBasicController implements Ext
 		@Override
 		public FormItem createItem(String startValue) {
 			qpoolTaxonomyTreeBuilder.loadTaxonomyLevelsSelection(getIdentity(), false, allTaxonomyLevels);
-			return createItem(qpoolTaxonomyTreeBuilder.getTaxonomicPaths(),
+			return createItem(qpoolTaxonomyTreeBuilder.getTaxonomicKeyPaths(),
 					qpoolTaxonomyTreeBuilder.getSelectableValues(), startValue);
 		}
-		
+
 		@Override
-		public List<String> getQueries(FormItem item) {
-			String val = getValue(item);
-			if(StringHelper.containsNonWhitespace(val)) {
-				String[] levels = val.substring(1).split("/");
-				return Stream.of(levels)
-						.map(level -> append(getDocAttribute(), ":(", level, ") "))
-						.collect(Collectors.toList());
-			}
-			return Collections.emptyList();
+		public String getValue(FormItem item) {
+			return super.getValue(item).replaceAll(" ", "_").replaceAll("/", "_") + "*";
 		}
+		
 	}
 	
 	public class LicenseQueryParameter extends SingleChoiceQueryParameter {
diff --git a/src/main/java/org/olat/modules/qpool/ui/tree/QPoolTaxonomyTreeBuilder.java b/src/main/java/org/olat/modules/qpool/ui/tree/QPoolTaxonomyTreeBuilder.java
index cda352ef331d08f7e9e943916537b5f1e97363b4..a6a40cbcc574c51918f3a4dc0396fca4ae8a5745 100644
--- a/src/main/java/org/olat/modules/qpool/ui/tree/QPoolTaxonomyTreeBuilder.java
+++ b/src/main/java/org/olat/modules/qpool/ui/tree/QPoolTaxonomyTreeBuilder.java
@@ -59,6 +59,7 @@ public class QPoolTaxonomyTreeBuilder {
 	private String[] selectableKeys;
 	private String[] selectableValues;
 	private String[] taxonomicPaths;
+	private String[] taxonomicKeyPaths;
 	private List<TaxonomyLevel> treeTaxonomyLevels;
 	
 	@Autowired
@@ -125,6 +126,7 @@ public class QPoolTaxonomyTreeBuilder {
 		selectableKeys = new String[0];
 		selectableValues = new String[0];
 		taxonomicPaths = new String[0];
+		taxonomicKeyPaths = new String[0];
 		treeTaxonomyLevels = new ArrayList<>();
 	}
 	
@@ -145,6 +147,10 @@ public class QPoolTaxonomyTreeBuilder {
 	public String[] getTaxonomicPaths() {
 		return taxonomicPaths;
 	}
+	
+	public String[] getTaxonomicKeyPaths() {
+		return taxonomicKeyPaths;
+	}
 
 	public List<TaxonomyLevel> getTreeTaxonomyLevels() {
 		return treeTaxonomyLevels;
@@ -195,13 +201,15 @@ public class QPoolTaxonomyTreeBuilder {
 		selectableKeys = new String[selectableTaxonomyLevels.size()];
 		selectableValues = new String[selectableTaxonomyLevels.size()];
 		taxonomicPaths = new String[selectableTaxonomyLevels.size()];
+		taxonomicKeyPaths = new String[selectableTaxonomyLevels.size()];
 		for(int i=selectableTaxonomyLevels.size(); i-->0; ) {
 			TaxonomyLevel level = selectableTaxonomyLevels.get(i);
 			selectableKeys[i] = Long.toString(level.getKey());
 			selectableValues[i] = computeIntendention(level, new StringBuilder()).append(level.getDisplayName()).toString();
 			taxonomicPaths[i] = level.getMaterializedPathIdentifiers();
+			taxonomicKeyPaths[i] = level.getMaterializedPathKeys();
 		}
-		addEmptyEntry();	
+		addEmptyEntry();
 	}
 
 	private StringBuilder computeIntendention(TaxonomyLevel level, StringBuilder intendation) {
@@ -218,17 +226,21 @@ public class QPoolTaxonomyTreeBuilder {
 			String[] movedKeys = new String[selectableKeys.length + 1];
 			String[] movedValues = new String[selectableValues.length + 1];
 			String[] movedTaxonomicPaths = new String[taxonomicPaths.length + 1];
+			String[] movedTaxonomicKeyPaths = new String[taxonomicKeyPaths.length + 1];
 			movedKeys[0] = "-1";
 			movedValues[0] = "-";
 			movedTaxonomicPaths[0] = "/";
+			movedTaxonomicKeyPaths[0] = "/";
 			for (int i=selectableKeys.length; i-->0;) {
 				movedKeys[i+1] = selectableKeys[i];
 				movedValues[i+1] = selectableValues[i];
 				movedTaxonomicPaths[i+1] = taxonomicPaths[i];
+				movedTaxonomicKeyPaths[i+1] = taxonomicKeyPaths[i];
 			}
 			selectableKeys = movedKeys;
 			selectableValues = movedValues;
 			taxonomicPaths = movedTaxonomicPaths;
+			taxonomicKeyPaths = movedTaxonomicKeyPaths;
 		}
 	}