Index: src/main/java/sgf/gateway/search/provider/solr/query/PassFreeTextQueryStrategy.java
===================================================================
--- src/main/java/sgf/gateway/search/provider/solr/query/PassFreeTextQueryStrategy.java	(revision 0)
+++ src/main/java/sgf/gateway/search/provider/solr/query/PassFreeTextQueryStrategy.java	(working copy)
@@ -0,0 +1,11 @@
+package sgf.gateway.search.provider.solr.query;
+
+/**
+ * Created by jcunning on 5/1/14.
+ */
+public class PassFreeTextQueryStrategy implements FreeTextQueryStrategy {
+    @Override
+    public String getFreeTextQuery(String string) {
+        return string;
+    }
+}
Index: src/main/java/sgf/gateway/web/controllers/metrics/LinkMetricsController.java
===================================================================
--- src/main/java/sgf/gateway/web/controllers/metrics/LinkMetricsController.java	(revision 0)
+++ src/main/java/sgf/gateway/web/controllers/metrics/LinkMetricsController.java	(working copy)
@@ -0,0 +1,27 @@
+package sgf.gateway.web.controllers.metrics;
+
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.view.RedirectView;
+
+
+@Controller
+public class LinkMetricsController {
+
+	// Redirect so request goes thru Clickstream to collect metrics
+	@RequestMapping(value = "/redirect.html", method=RequestMethod.GET)
+	public ModelAndView redirect (@RequestParam(value="link", required=true) String link) {
+
+		ModelAndView result = null;
+
+		RedirectView redirectView = new RedirectView(link);
+		result = new ModelAndView(redirectView);
+
+		return result;
+	}
+
+}
Index: src/main/java/sgf/gateway/web/controllers/metrics/OffsiteLinkMetricsController.java
===================================================================
--- src/main/java/sgf/gateway/web/controllers/metrics/OffsiteLinkMetricsController.java	(revision 18675)
+++ src/main/java/sgf/gateway/web/controllers/metrics/OffsiteLinkMetricsController.java	(working copy)
@@ -1,27 +0,0 @@
-package sgf.gateway.web.controllers.metrics;
-
-
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.servlet.view.RedirectView;
-
-
-@Controller
-public class OffsiteLinkMetricsController {
-
-	// Redirect so request goes thru Clickstream to collect metrics
-	@RequestMapping(value = "/redirect.html", method=RequestMethod.GET)
-	public ModelAndView redirect (@RequestParam(value="link", required=true) String link) {
-
-		ModelAndView result = null;
-
-		RedirectView redirectView = new RedirectView(link);
-		result = new ModelAndView(redirectView);
-
-		return result;
-	}
-
-}
Index: src/main/java/sgf/gateway/web/controllers/search/AnalyticalSearchCommand.java
===================================================================
--- src/main/java/sgf/gateway/web/controllers/search/AnalyticalSearchCommand.java	(revision 0)
+++ src/main/java/sgf/gateway/web/controllers/search/AnalyticalSearchCommand.java	(working copy)
@@ -0,0 +1,23 @@
+package sgf.gateway.web.controllers.search;
+
+import org.hibernate.validator.constraints.NotBlank;
+import org.springframework.util.StringUtils;
+
+public class AnalyticalSearchCommand {
+
+	@NotBlank(message="A query is required.")
+	String queryText;
+
+	public void setQueryText(String queryText) {
+		
+		if (StringUtils.hasText(queryText)) {
+			this.queryText = queryText.trim();
+		}
+		
+		this.queryText = queryText;
+	}
+	
+	public String getQueryText() {
+		return queryText;
+	}
+}
Index: src/main/java/sgf/gateway/web/controllers/search/AnalyticalSearchController.java
===================================================================
--- src/main/java/sgf/gateway/web/controllers/search/AnalyticalSearchController.java	(revision 0)
+++ src/main/java/sgf/gateway/web/controllers/search/AnalyticalSearchController.java	(working copy)
@@ -0,0 +1,76 @@
+package sgf.gateway.web.controllers.search;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.validation.Valid;
+
+import org.apache.solr.client.solrj.SolrServerException;
+import org.springframework.stereotype.Controller;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.servlet.ModelAndView;
+
+import sgf.gateway.search.api.Criteria;
+import sgf.gateway.search.api.SearchQuery;
+import sgf.gateway.search.api.SearchResult;
+import sgf.gateway.search.core.CriteriaImpl;
+import sgf.gateway.search.core.SortTargetsImpl;
+
+@Controller
+public class AnalyticalSearchController {
+
+	private final SearchQuery searchQuery;
+
+	public AnalyticalSearchController(SearchQuery searchQuery) {
+		this.searchQuery = searchQuery;
+	}
+
+	@RequestMapping(value = "/root/search/analytic.html", method = RequestMethod.GET)
+	public ModelAndView search() throws SolrServerException {
+
+		ModelAndView modelAndView = new ModelAndView("/search/search-analytical");
+
+		return modelAndView;
+	}
+
+	@RequestMapping(value = "/root/search/analytic.html", method = RequestMethod.POST)
+	public ModelAndView submit(@ModelAttribute("analyticalSearchForm") @Valid AnalyticalSearchCommand searchCommand, BindingResult result) throws SolrServerException {
+		
+		ModelAndView modelAndView = new ModelAndView("/search/search-analytical");
+		
+		if (!result.hasErrors()) {
+			SearchResult searchResult = this.executeSearchQuery(searchCommand);
+			modelAndView.addObject("searchResult", searchResult);		
+		}
+		
+		return modelAndView;
+	}
+
+	@ModelAttribute("analyticalSearchForm")
+	public AnalyticalSearchCommand setupAnalyticalSearchCommand() {
+		return new AnalyticalSearchCommand();
+	}
+
+	private SearchResult executeSearchQuery(AnalyticalSearchCommand searchCommand) {
+
+		Criteria criteria = this.createSearchCriteria(searchCommand);
+		SearchResult searchResult = this.searchQuery.execute(criteria);
+
+		return searchResult;
+	}
+	
+	private Criteria createSearchCriteria(AnalyticalSearchCommand searchCommand) {
+		
+		CriteriaImpl criteria = new CriteriaImpl();
+		
+		criteria.setFreeText(searchCommand.getQueryText());
+		
+		Integer bigEnoughToReturnAll = 20000;
+		criteria.setResultSize(bigEnoughToReturnAll);
+		
+		return criteria;
+	}
+}
Index: src/main/resources/spring/sgf/gateway/web/controllers/metrics/metrics-controllers.xml
===================================================================
--- src/main/resources/spring/sgf/gateway/web/controllers/metrics/metrics-controllers.xml	(revision 18675)
+++ src/main/resources/spring/sgf/gateway/web/controllers/metrics/metrics-controllers.xml	(working copy)
@@ -11,6 +11,6 @@
 		<constructor-arg index="2" ref="gateway" />
 	</bean>
 	
-	<bean id="offsiteLinkMetricsController" class="sgf.gateway.web.controllers.metrics.OffsiteLinkMetricsController" />
+	<bean id="linkMetricsController" class="sgf.gateway.web.controllers.metrics.LinkMetricsController" />
 
 </beans>
Index: src/main/resources/spring/sgf/gateway/web/controllers/search/search.xml
===================================================================
--- src/main/resources/spring/sgf/gateway/web/controllers/search/search.xml	(revision 18675)
+++ src/main/resources/spring/sgf/gateway/web/controllers/search/search.xml	(working copy)
@@ -11,4 +11,8 @@
 		<property name="resultsPerPageValues" value="${search.ui.rpp.options}" />
 	</bean>
 
+    <bean id="analyticalSearchController" class="sgf.gateway.web.controllers.search.AnalyticalSearchController" >
+        <constructor-arg index="0" ref="analyticalSearchQuery" />
+    </bean>
+
 </beans>
Index: src/main/webapp/WEB-INF/tags/cadis/dataset-summary-tab-content.tag
===================================================================
--- src/main/webapp/WEB-INF/tags/cadis/dataset-summary-tab-content.tag	(revision 18739)
+++ src/main/webapp/WEB-INF/tags/cadis/dataset-summary-tab-content.tag	(working copy)
@@ -325,6 +325,7 @@
 		<c:choose>
 			<c:when test="${result.remoteIndexable}">
 				<c:url var="redirectURL" value="/redirect.html" >
+					<c:param name="prv" value="mlt" />
 					<c:param name="link" value="${result.detailsURI}" />
 				</c:url>
 				<a href="${redirectURL}">${result.title}</a> 
@@ -332,7 +333,12 @@
 				<br>
 			</c:when>
 			<c:otherwise>
-				<a href="<c:url value="/${result.type.toLowerCase()}/${result.shortName}.html" />">${result.title}</a><br>
+				<c:url var="gatewayURL" value="/${result.type.toLowerCase()}/${result.shortName}.html" />
+				<c:url var="redirectURL" value="/redirect.html" >
+					<c:param name="prv" value="mlt" />
+					<c:param name="link" value="${gatewayURL}" />
+				</c:url>
+				<a href="${redirectURL}">${result.title}</a><br>
 			</c:otherwise>
 		</c:choose>
 	</c:forEach>
Index: src/main/webapp/WEB-INF/views/html/cadis/root/index.jsp
===================================================================
--- src/main/webapp/WEB-INF/views/html/cadis/root/index.jsp	(revision 18700)
+++ src/main/webapp/WEB-INF/views/html/cadis/root/index.jsp	(working copy)
@@ -39,6 +39,9 @@
 	<h5><legend>Search Provider</legend></h5>
 		<ul>
 			<li><a href='<c:url value="/root/search/reindex.htm"/>'>Reindex</a> (Root Admin Only)</li>
+			<li class="desc">Reindex the SOLR Search Index</li>
+			<li><a href='<c:url value="/root/search/analytic.html"/>'>Analytical Search</a> (Root Admin Only)</li>
+			<li class="desc">Access the Analytical Search page</li>
 		</ul>
 	
 	<h5><legend>Gateway Scheduled Tasks</legend></h5>
Index: src/main/webapp/WEB-INF/views/html/root/index.jsp
===================================================================
--- src/main/webapp/WEB-INF/views/html/root/index.jsp	(revision 18700)
+++ src/main/webapp/WEB-INF/views/html/root/index.jsp	(working copy)
@@ -39,6 +39,11 @@
 		<li><a href='<c:url value="/root/search/reindex.htm"/>'>Reindex</a> (Root Admin Only)</li>
 	</ul>				
 		
+	<h5><legend>Analytical Search</legend></h5>
+	<ul>
+		<li><a href="<c:url value="/root/search/analytic.html"/>" >Analytical Search</a> (Root Admin Only)</li>
+	</ul>					
+		
 	<h5><legend>Publishing</legend></h5>
 	<ul>
 		<li><a href="<c:url value="/publish/publishThreddsCatalog.htm"/>" >Publish THREDDS Catalog</a> (Root Admin Only)</li>
Index: src/main/webapp/WEB-INF/views/html/search/search-analytical.jsp
===================================================================
--- src/main/webapp/WEB-INF/views/html/search/search-analytical.jsp	(revision 0)
+++ src/main/webapp/WEB-INF/views/html/search/search-analytical.jsp	(working copy)
@@ -0,0 +1,59 @@
+<%@ include file="/WEB-INF/views/html/common/include.jsp" %>
+
+<tiles:insertDefinition name="search-layout">
+
+<tiles:putAttribute type="string" name="title" value="Analytical Search" />
+<tiles:putAttribute type="string" name="pageTitle" value="Analytical Search" />
+
+<tiles:putAttribute name="body">
+
+<common:form-errors commandName="analyticalSearchForm" />
+
+<div class="form">
+
+<springForm:form method="post" commandName="analyticalSearchForm" >
+
+	<springForm:input cssClass="textfield" path="queryText" size="100"/>
+	<input class="button" type="submit" value="Search" id="searchButton"/>
+
+</springForm:form>
+
+</div>
+
+<c:if test="${searchResult != null}">
+<c:choose>
+	<c:when test="${searchResult.resultCount > 0}">
+		Result count: ${searchResult.resultCount}<br><br>
+		<c:forEach var="result" items="${searchResult.results}">
+			<b>${result.title}</b><br>
+			&nbsp;&nbsp;${result.type}&nbsp;
+			<c:choose>
+				<c:when test="${result.remoteIndexable}">
+					<c:url var="redirectURL" value="/redirect.html" >
+						<c:param name="prv" value="mlt" />
+						<c:param name="link" value="${result.detailsURI}" />
+					</c:url>
+					<a href="${redirectURL}">${result.title}</a> 
+					<a href="${redirectURL}"><img src="<c:url value="/images/icons/external-link-icon.svg" />" ></a> 
+				</c:when>
+				<c:otherwise>
+					<c:url var="gatewayURL" value="/${result.type.toLowerCase()}/${result.shortName}.html" />
+					<c:url var="redirectURL" value="/redirect.html" >
+						<c:param name="prv" value="mlt" />
+						<c:param name="link" value="${gatewayURL}" />
+					</c:url>
+					<a href="${redirectURL}">${result.title}</a>
+				</c:otherwise>
+			</c:choose>
+			<br><br>
+		</c:forEach>
+	</c:when>
+	<c:otherwise>
+	No results found!
+	</c:otherwise>
+</c:choose>
+</c:if>
+
+</tiles:putAttribute>
+
+</tiles:insertDefinition>