diff --git a/src/main/java/org/apache/sling/capabilities/jcr/SearchSource.java b/src/main/java/org/apache/sling/capabilities/jcr/SearchSource.java
index 31bad69..a4925de 100644
--- a/src/main/java/org/apache/sling/capabilities/jcr/SearchSource.java
+++ b/src/main/java/org/apache/sling/capabilities/jcr/SearchSource.java
@@ -28,13 +28,19 @@
 import org.apache.sling.capabilities.CapabilitiesSource;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.serviceusermapping.ServiceUserMapped;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /** CapabilitiesSource that provides information on the JCR Repository's search features */
 @Component(service = CapabilitiesSource.class)
+@Designate(ocd = SearchSource.Config.class)
 public class SearchSource implements CapabilitiesSource {
 
     public static final String NAMESPACE = "org.apache.sling.jcr.search";
@@ -43,11 +49,14 @@
 
     public static final String SUBSERVICE_NAME = "search";
 
+    public static final String DEFAULT_QUERY = "/jcr:root/oak:index//* [@useInSimilarity = true]";
+
     public static final int SIMILARITY_SEARCH_CACHE_LIFETIME_SECONDS = 60;
 
     private final Logger log = LoggerFactory.getLogger(getClass().getName());
     private String similaritySearchActiveResult;
     private long similaritySearchCacheExpires;
+    private String similarityIndexQuery;
 
     @Reference
     private SlingRepository repository;
@@ -55,6 +64,24 @@
     @Reference(target="("+ServiceUserMapped.SUBSERVICENAME+"=" + SUBSERVICE_NAME + ")")
     private ServiceUserMapped scriptServiceUserMapped;
 
+    @ObjectClassDefinition(
+        name = "Apache Sling JCR Capabilities - Search Source",
+        description = "Provides information JCR search features"
+    )
+    public static @interface Config {
+        @AttributeDefinition(
+            name = "Similarity Index Query",
+            description = "A JCR XPAth query that returns at least 1 Node if similarity search is available."
+                + " The service user that this component uses must have sufficient rights to read the corresponding nodes."
+        )
+        String similarityIndexQuery() default DEFAULT_QUERY;
+    }
+
+    @Activate
+    protected void activate(Config cfg, ComponentContext ctx) {
+        similarityIndexQuery = cfg.similarityIndexQuery();
+    }
+
     @Override
     public Map<String, Object> getCapabilities() throws Exception {
         refreshCachedValues();
@@ -74,14 +101,13 @@
         }
 
         similaritySearchCacheExpires = System.currentTimeMillis() + (SIMILARITY_SEARCH_CACHE_LIFETIME_SECONDS * 1000L);
-        final String query = "/jcr:root/oak:index//* [@useInSimilarity = true]";
 
         synchronized(this) {
             Session session = null;
             try {
                 session = repository.loginService(SUBSERVICE_NAME, null);
                 final QueryManager qm = session.getWorkspace().getQueryManager();
-                final QueryResult qr = qm.createQuery(query, Query.XPATH).execute();
+                final QueryResult qr = qm.createQuery(similarityIndexQuery, Query.XPATH).execute();
                 similaritySearchActiveResult = String.valueOf(qr.getNodes().hasNext());
             } catch(RepositoryException rex) {
                 similaritySearchActiveResult = rex.toString();
@@ -92,7 +118,7 @@
             }
         }
 
-        log.debug("Recomputed {}={} using query {}", SSA_PROP_NAME, similaritySearchActiveResult, query);
+        log.debug("Recomputed {}={} using query {}", SSA_PROP_NAME, similaritySearchActiveResult, similarityIndexQuery);
     }
     
     @Override
