diff --git a/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/solr/search/SearchServiceLogsTest.java b/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/solr/search/SearchServiceLogsTest.java
index b7766c9..2dfe5f3 100644
--- a/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/solr/search/SearchServiceLogsTest.java
+++ b/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/solr/search/SearchServiceLogsTest.java
@@ -166,18 +166,21 @@
   @Test
   public void testIncludeMultipleTermsDelimitedByDash() throws Exception {
     solr.addDoc("0", "Unhandled exception");
-    solr.addDoc("1", "At line 112 an unhandled-exception occurred when");
-    solr.addDoc("2", "exception occurred");
-    solr.addDoc("3", "exception");
-    solr.addDoc("4", "Unhandled error");
-    solr.addDoc("5", "Error occurred");
+    solr.addDoc("1", "Unhandled+exception");
+    solr.addDoc("2", "At line 112 an unhandled-exception occurred when");
+    solr.addDoc("3", "exception occurred");
+    solr.addDoc("4", "exception");
+    solr.addDoc("5", "Unhandled error");
+    solr.addDoc("6", "Error occurred");
 
     BaseServiceLogRequest request = new BaseServiceLogQueryRequest();
     request.setIncludeQuery("[{\"log_message\":\"\\\"Unhandled-exception\\\"\"}]");
     SolrDocumentList found = executeQuery(request);
 
-    assertThat(found, hasSize(1));
+    assertThat(found, hasSize(3));
+    assertThat(found, hasItem(solrDoc("0")));
     assertThat(found, hasItem(solrDoc("1")));
+    assertThat(found, hasItem(solrDoc("2")));
   }
 
   @Test
@@ -194,8 +197,10 @@
     request.setIncludeQuery("[{\"log_message\":\"\\\"Unhandled+exception\\\"\"}]");
     SolrDocumentList found = executeQuery(request);
 
-    assertThat(found, hasSize(1));
+    assertThat(found, hasSize(3));
+    assertThat(found, hasItem(solrDoc("0")));
     assertThat(found, hasItem(solrDoc("1")));
+    assertThat(found, hasItem(solrDoc("2")));
   }
 
   @Test
@@ -232,31 +237,22 @@
   @Test
   public void testIncludeEMailAddress() throws Exception {
     solr.addDoc("0", "Email address: john@hortonworks.com");
-    solr.addDoc("1", "Another document");
-
+    solr.addDoc("1", "Another document doe@hortonworks.com");
+    solr.addDoc("2", "Another document without email address");
+    solr.addDoc("3", "Just a name and a domain name: john hortonworks.com");
+    solr.addDoc("4", "Hi name is John Domain name: hortonworks.com");
     BaseServiceLogRequest request = new BaseServiceLogQueryRequest();
-    request.setIncludeQuery("[{\"log_message\":\"john@hortonworks.com\"}]");
+    request.setIncludeQuery("[{\"log_message\":\"\\\"john@hortonworks.com\\\"\"}]");
     SolrDocumentList found = executeQuery(request);
 
-    assertThat(found, hasSize(1));
+    assertThat(found, hasSize(2));
     assertThat(found, hasItem(solrDoc("0")));
+    assertThat(found, hasItem(solrDoc("3")));
   }
 
 
   private final ServiceLogLevelDateRangeRequestQueryConverter dateRangeRequestQueryConverter = new ServiceLogLevelDateRangeRequestQueryConverter();
 
-  @Test
-  public void testDateRangeRequestIncludeEMailAddress() throws Exception {
-    solr.addDoc("0", "Email address: john@hortonworks.com");
-    solr.addDoc("1", "Another document doe@hortonworks.com");
-
-    ServiceGraphRequest request = serviceGraphRequest("[{\"log_message\":\"john@hortonworks.com\"}]");
-    NamedList<List<PivotField>> found = executeQuery(request);
-
-    assertThat(found.size(), is(1));
-    assertThat(found.get("level").get(0).getCount(), is(1));
-  }
-
   private ServiceGraphRequest serviceGraphRequest(String includeQuery) {
     ServiceGraphRequest request = new ServiceGraphQueryRequest();
     request.setFrom(SOLR_DATETIME_FORMATTER.format(OffsetDateTime.now(ZoneId.of("UTC")).minusDays(1)));
@@ -327,7 +323,7 @@
     NamedList<List<PivotField>> found = executeQuery(request);
 
     assertThat(found.size(), is(1));
-    assertThat(found.get("level").get(0).getCount(), is(1));
+    assertThat(found.get("level").get(0).getCount(), is(2));
   }
 
   @Test
@@ -344,7 +340,7 @@
     NamedList<List<PivotField>> found = executeQuery(request);
 
     assertThat(found.size(), is(1));
-    assertThat(found.get("level").get(0).getCount(), is(1));
+    assertThat(found.get("level").get(0).getCount(), is(3));
   }
 
   @Test
@@ -373,4 +369,31 @@
     assertThat(found.size(), is(1));
     assertThat(found.get("level").get(0).getCount(), is(3));
   }
+
+  @Test
+  public void testSearchTermEndsWithDot() throws Exception {
+    solr.addDoc("0", "Caught exception checkIn.");
+    solr.addDoc("1", "Caught exception checkIn");
+    solr.addDoc("2", "Caught exception other");
+
+    BaseServiceLogRequest request = new BaseServiceLogQueryRequest();
+    request.setIncludeQuery("[{\"log_message\":\"\\\"checkIn\\\"\"}]");
+    SolrDocumentList found = executeQuery(request);
+
+    assertThat(found, hasSize(2));
+    assertThat(found, hasItem(solrDoc("0")));
+    assertThat(found, hasItem(solrDoc("1")));
+  }
+
+  @Test
+  public void testSearchPhraseContainsStar() throws Exception {
+    solr.addDoc("0", "Caught exception- checkIn");
+
+    BaseServiceLogRequest request = new BaseServiceLogQueryRequest();
+    request.setIncludeQuery("[{\"log_message\":\"\\\"Caught exception*\\\"\"}]");
+    SolrDocumentList found = executeQuery(request);
+
+    assertThat(found, hasSize(1));
+    assertThat(found, hasItem(solrDoc("0")));
+  }
 }
diff --git a/ambari-logsearch-server/src/main/configsets/audit_logs/conf/managed-schema b/ambari-logsearch-server/src/main/configsets/audit_logs/conf/managed-schema
index 6896918..4715f07 100644
--- a/ambari-logsearch-server/src/main/configsets/audit_logs/conf/managed-schema
+++ b/ambari-logsearch-server/src/main/configsets/audit_logs/conf/managed-schema
@@ -91,7 +91,7 @@
   <field name="ip" type="key_lower_case"/>
   <field name="level" type="key_lower_case"/>
   <field name="logType" type="key_lower_case" multiValued="false"/>
-  <field name="log_message" type="text_ws" multiValued="false" omitNorms="false"/>
+  <field name="log_message" type="text_std_token_lower_case" multiValued="false" omitNorms="false"/>
   <field name="logfile_line_number" type="tint" omitNorms="false"/>
   <field name="logger_name" type="key_lower_case"/>
   <field name="message_md5" type="string" multiValued="false"/>
diff --git a/ambari-logsearch-server/src/main/configsets/hadoop_logs/conf/managed-schema b/ambari-logsearch-server/src/main/configsets/hadoop_logs/conf/managed-schema
index bcc11ea..583e69a 100644
--- a/ambari-logsearch-server/src/main/configsets/hadoop_logs/conf/managed-schema
+++ b/ambari-logsearch-server/src/main/configsets/hadoop_logs/conf/managed-schema
@@ -97,7 +97,7 @@
   <field name="ip" type="string" multiValued="false"/>
   <field name="level" type="lowercase" multiValued="false"/>
   <field name="line_number" type="tint" omitNorms="false"/>
-  <field name="log_message" type="text_ws" multiValued="false" omitNorms="false"/>
+  <field name="log_message" type="text_general" multiValued="false" omitNorms="false"/>
   <field name="logfile_line_number" type="tint" omitNorms="false"/>
   <field name="logger_name" type="string" multiValued="false"/>
   <field name="logtime" type="tdate" multiValued="false"  docValues="true"/>
