diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Ingester.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Ingester.java
index 88eaffbed1c7d0070bf34daa9c51f2d04eb58d60..994dfb9161e828cac501a40287b46144a08e0616 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Ingester.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Ingester.java
@@ -36,6 +36,8 @@
 import org.sleuthkit.autopsy.healthmonitor.TimingMetric;
 import org.sleuthkit.autopsy.ingest.IngestJobContext;
 import org.sleuthkit.autopsy.keywordsearch.Chunker.Chunk;
+import org.sleuthkit.autopsy.textextractors.TextExtractor;
+import org.sleuthkit.autopsy.textextractors.TextExtractorFactory;
 import org.sleuthkit.datamodel.AbstractFile;
 import org.sleuthkit.datamodel.BlackboardArtifact;
 import org.sleuthkit.datamodel.Content;
@@ -203,71 +205,69 @@ < T extends SleuthkitVisitableItem> boolean indexAndSearchStrings(Reader sourceR
     // TODO (JIRA-3118): Cancelled text indexing does not propagate cancellation to clients 
     private < T extends SleuthkitVisitableItem> boolean indexTextAndSearch(Reader sourceReader, long sourceID, String sourceName, T source, IngestJobContext context, boolean doLanguageDetection, boolean indexIntoSolr, List<String> keywordListNames) throws Ingester.IngesterException {
         int numChunks = 0; //unknown until chunking is done
-        
+
         Map<String, String> contentFields = Collections.unmodifiableMap(getContentFields(source));
         Optional<Language> language = Optional.empty();
         InlineSearcher searcher = new InlineSearcher(keywordListNames);
         //Get a reader for the content of the given source
         try (BufferedReader reader = new BufferedReader(sourceReader)) {
             Chunker chunker = new Chunker(reader);
-            
+
             while (chunker.hasNext()) {
                 if (context != null && context.fileIngestIsCancelled()) {
                     logger.log(Level.INFO, "File ingest cancelled. Cancelling keyword search indexing of {0}", sourceName);
                     return false;
                 }
-                
+
                 Chunk chunk = chunker.next();
+                String chunkId = "";
+                if (indexIntoSolr) {
+                    Map<String, Object> fields = new HashMap<>(contentFields);
+                    chunkId = Server.getChunkIdString(sourceID, numChunks + 1);
+                    fields.put(Server.Schema.ID.toString(), chunkId);
+                    fields.put(Server.Schema.CHUNK_SIZE.toString(), String.valueOf(chunk.getBaseChunkLength()));
+
+                    if (doLanguageDetection) {
+                        int size = Math.min(chunk.getBaseChunkLength(), LANGUAGE_DETECTION_STRING_SIZE);
+                        language = languageSpecificContentIndexingHelper.detectLanguageIfNeeded(chunk.toString().substring(0, size));
+
+                        // only do language detection on the first chunk of the document
+                        doLanguageDetection = false;
+                    }
+                    language.ifPresent(lang -> languageSpecificContentIndexingHelper.updateLanguageSpecificFields(fields, chunk, lang));
+                    try {
+                        //add the chunk text to Solr index
+                        indexChunk(chunk.toString(), chunk.geLowerCasedChunk(), sourceName, fields);
+                        // add mini chunk when there's a language specific field
+                        if (chunker.hasNext() && language.isPresent()) {
+                            languageSpecificContentIndexingHelper.indexMiniChunk(chunk, sourceName, new HashMap<>(contentFields), chunkId, language.get());
+                        }
+                        numChunks++;
+                    } catch (Ingester.IngesterException ingEx) {
+                        logger.log(Level.WARNING, "Ingester had a problem with extracted string from file '" //NON-NLS
+                                + sourceName + "' (id: " + sourceID + ").", ingEx);//NON-NLS
+
+                        throw ingEx; //need to rethrow to signal error and move on
+                    }
+                }
                 
                 if(keywordListNames != null) {
                     searcher.searchChunk(chunk);
                 }
-                
-                if(!indexIntoSolr) {
-                    continue;
-                }
-                
-                Map<String, Object> fields = new HashMap<>(contentFields);
-                String chunkId = Server.getChunkIdString(sourceID, numChunks + 1);
-                fields.put(Server.Schema.ID.toString(), chunkId);
-                fields.put(Server.Schema.CHUNK_SIZE.toString(), String.valueOf(chunk.getBaseChunkLength()));
-
-                if (doLanguageDetection) {
-                    int size = Math.min(chunk.getBaseChunkLength(), LANGUAGE_DETECTION_STRING_SIZE);
-                    language = languageSpecificContentIndexingHelper.detectLanguageIfNeeded(chunk.toString().substring(0, size));
-                    
-                    // only do language detection on the first chunk of the document
-                    doLanguageDetection = false;
-                }
-                language.ifPresent(lang -> languageSpecificContentIndexingHelper.updateLanguageSpecificFields(fields, chunk, lang));
-                try {
-                    //add the chunk text to Solr index
-                    indexChunk(chunk.toString(), chunk.geLowerCasedChunk(), sourceName, fields);
-                    // add mini chunk when there's a language specific field
-                    if (chunker.hasNext() && language.isPresent()) {
-                        languageSpecificContentIndexingHelper.indexMiniChunk(chunk, sourceName, new HashMap<>(contentFields), chunkId, language.get());
-                    }
-                    numChunks++;
-                } catch (Ingester.IngesterException ingEx) {
-                    logger.log(Level.WARNING, "Ingester had a problem with extracted string from file '" //NON-NLS
-                            + sourceName + "' (id: " + sourceID + ").", ingEx);//NON-NLS
-
-                    throw ingEx; //need to rethrow to signal error and move on
-                }
             }
             if (chunker.hasException()) {
                 logger.log(Level.WARNING, "Error chunking content from " + sourceID + ": " + sourceName, chunker.getException());
                 return false;
-            } 
-            
-            searcher.makeArtifacts((Content)source, context, sourceID);
+            }
+
+            searcher.makeArtifacts((Content) source, context, sourceID);
         } catch (Exception ex) {
             logger.log(Level.WARNING, "Unexpected error, can't read content stream from " + sourceID + ": " + sourceName, ex);//NON-NLS
             return false;
         } finally {
             if (context != null && context.fileIngestIsCancelled()) {
                 return false;
-            } else if(indexIntoSolr){
+            } else if (indexIntoSolr) {
                 Map<String, Object> fields = new HashMap<>(contentFields);
                 //after all chunks, index just the meta data, including the  numChunks, of the parent file
                 fields.put(Server.Schema.NUM_CHUNKS.toString(), Integer.toString(numChunks));
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/InlineSearcher.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/InlineSearcher.java
index f8313ace377c63788b5a463f3a67f3db5520dec0..9cfef448121497cf91966a9a93153fddeedf0045 100755
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/InlineSearcher.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/InlineSearcher.java
@@ -77,11 +77,17 @@ void searchChunk(Chunk chunk) throws TskCoreException {
                             keywordHits.addAll(createKeywordHits(chunk, originalKeyword));
                         }
                     } else {
-                        String REGEX_FIND_WORD="(?i).*?\\b%s\\b.*?";
+                        String REGEX_FIND_WORD="\\b\\W*%s\\W*\\b"; //"[\\w[\\.']]*%s[\\w[\\.']]*"; //"(?i).*?\\b%s\\b.*?";
                         String regex=String.format(REGEX_FIND_WORD, Pattern.quote(originalKeyword.getSearchTerm().toLowerCase()));
-                        if(chunk.geLowerCasedChunk().matches(regex)) {
+//                        if(chunk.geLowerCasedChunk().matches(regex)) {
+//                            keywordHits.addAll(createKeywordHits(chunk, originalKeyword));
+//                        }     
+
+                       Pattern pattern = Pattern.compile(regex, java.util.regex.Pattern.CASE_INSENSITIVE);
+                       Matcher matcher = pattern.matcher(chunk.geLowerCasedChunk());
+                       if (matcher.find()) {
                             keywordHits.addAll(createKeywordHits(chunk, originalKeyword));
-                        }     
+                        }
                     }
                 } else {
                     String regex = originalKeyword.getSearchTerm();
@@ -152,7 +158,12 @@ private List<KeywordHit> createKeywordHits(Chunk chunk, Keyword originalKeyword)
              * and possessives (e.g. hacker's). This obviously works for English
              * but is probably not sufficient for other languages.
              */
-            searchPattern = "[\\w[\\.']]*" + java.util.regex.Pattern.quote(keywordString.toLowerCase()) + "[\\w[\\.']]*";
+            if(!originalKeyword.searchTermIsWholeWord()) {
+                searchPattern = "[\\w[\\.']]*" + java.util.regex.Pattern.quote(keywordString.toLowerCase()) + "[\\w[\\.']]*";
+            } else {
+                String REGEX_FIND_WORD="\\b\\W*%s\\W*\\b"; 
+                searchPattern=String.format(REGEX_FIND_WORD, Pattern.quote(originalKeyword.getSearchTerm().toLowerCase()));
+            }
         } else {
             searchPattern = keywordString;
         }
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java
index 7b0caa6c76d4013aebc782c46caae195802be65b..9dcd3984dd3f0fc74a084e8de0545aec841f8776 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java
@@ -38,6 +38,7 @@
 import java.util.logging.Level;
 import java.util.stream.Collectors;
 import org.apache.tika.mime.MimeTypes;
+import org.openide.util.Exceptions;
 import org.openide.util.Lookup;
 import org.openide.util.NbBundle;
 import org.openide.util.NbBundle.Messages;
@@ -688,8 +689,7 @@ private boolean extractStringsAndIndex(AbstractFile aFile) {
                 if (context.fileIngestIsCancelled()) {
                     return true;
                 }
-                TextExtractor stringsExtractor = TextExtractorFactory.getStringsExtractor(aFile, stringsExtractionContext);
-                Reader extractedTextReader = stringsExtractor.getReader();
+                Reader extractedTextReader =  KeywordSearchUtil.getReader(aFile, stringsExtractionContext);
                 if (Ingester.getDefault().indexAndSearchStrings(extractedTextReader, aFile.getId(), aFile.getName(), aFile, KeywordSearchIngestModule.this.context, settings.isIndexToSolrEnabled(), settings.getNamesOfEnabledKeyWordLists())) {
                     putIngestStatus(jobId, aFile.getId(), IngestStatus.STRINGS_INGESTED);
                     return true;
@@ -698,11 +698,11 @@ private boolean extractStringsAndIndex(AbstractFile aFile) {
                     putIngestStatus(jobId, aFile.getId(), IngestStatus.SKIPPED_ERROR_TEXTEXTRACT);
                     return false;
                 }
-            } catch (IngesterException | TextExtractor.InitReaderException ex) {
+            } catch (IngesterException | TextExtractor.InitReaderException | TextExtractorFactory.NoTextExtractorFound ex) {
                 logger.log(Level.WARNING, "Failed to extract strings and ingest, file '" + aFile.getName() + "' (id: " + aFile.getId() + ").", ex);  //NON-NLS
                 putIngestStatus(jobId, aFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING);
                 return false;
-            }
+            } 
         }
 
         /**
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchUtil.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchUtil.java
index d828f14585d0ee60f06ee0c142b9efeef847b5df..e5f39885a5416876735536e1c8d8e6481a169789 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchUtil.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchUtil.java
@@ -20,10 +20,18 @@
 
 import java.awt.Component;
 import java.io.File;
+import java.io.Reader;
 import java.util.regex.Matcher;
 import org.sleuthkit.autopsy.coreutils.Logger;
 import javax.swing.JOptionPane;
+import org.openide.util.Lookup;
 import org.openide.windows.WindowManager;
+import org.sleuthkit.autopsy.textextractors.TextExtractor;
+import org.sleuthkit.autopsy.textextractors.TextExtractorFactory;
+import org.sleuthkit.datamodel.AbstractFile;
+import org.sleuthkit.datamodel.BlackboardArtifact;
+import org.sleuthkit.datamodel.Content;
+import org.sleuthkit.datamodel.TskCoreException;
 
 class KeywordSearchUtil {
     
@@ -181,4 +189,40 @@ static boolean isXMLList(String absPath) {
         //TODO: make this more robust, if necessary
         return new File(absPath).getName().endsWith(".xml"); //NON-NLS
     }
+    
+    static Reader getReader(Content content) throws TextExtractorFactory.NoTextExtractorFound, TextExtractor.InitReaderException{
+        return getReader(content, null);
+    }
+    
+    static Reader getReader(Content content, Lookup stringsExtractionContext) throws TextExtractorFactory.NoTextExtractorFound, TextExtractor.InitReaderException{
+        Reader reader = null;
+        if (content instanceof BlackboardArtifact) {
+            BlackboardArtifact artifact = (BlackboardArtifact) content;
+            if (artifact.getArtifactID() > 0) {
+                /*
+                 * Artifact indexing is only supported for artifacts that use
+                 * negative artifact ids to avoid overlapping with the object
+                 * ids of other types of Content.
+                 */
+                return null;
+            }
+            TextExtractor blackboardExtractor = TextExtractorFactory.getExtractor(content, null);
+            reader = blackboardExtractor.getReader();
+
+        } else if (content instanceof AbstractFile) {
+            TextExtractor stringsExtractor = TextExtractorFactory.getStringsExtractor( content, stringsExtractionContext);
+            reader = stringsExtractor.getReader();
+        } else {
+            try {
+                TextExtractor contentExtractor = TextExtractorFactory.getExtractor(content, null);
+                reader = contentExtractor.getReader();
+            } catch (TextExtractorFactory.NoTextExtractorFound | TextExtractor.InitReaderException ex) {
+                // Try the StringsTextExtractor if Tika extractions fails.
+                TextExtractor stringsExtractor = TextExtractorFactory.getStringsExtractor(content, null);
+                reader = stringsExtractor.getReader();
+            }
+        }
+
+        return reader;
+    }
 }
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KwsAnalysisResultIngestModule.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KwsAnalysisResultIngestModule.java
index 26ac0180675072fda932c925a395462a86af84b4..886b45b3a2cec346d6e6c70651b469edc826ac4e 100755
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KwsAnalysisResultIngestModule.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KwsAnalysisResultIngestModule.java
@@ -18,6 +18,7 @@
  */
 package org.sleuthkit.autopsy.keywordsearch;
 
+import java.io.Reader;
 import java.util.logging.Level;
 import org.openide.util.Lookup;
 import org.sleuthkit.autopsy.coreutils.Logger;
@@ -25,6 +26,8 @@
 import org.sleuthkit.autopsy.ingest.IngestJobContext;
 import org.sleuthkit.autopsy.ingest.IngestModule;
 import org.sleuthkit.autopsy.keywordsearchservice.KeywordSearchService;
+import org.sleuthkit.autopsy.textextractors.TextExtractor;
+import org.sleuthkit.autopsy.textextractors.TextExtractorFactory;
 import org.sleuthkit.datamodel.AnalysisResult;
 import org.sleuthkit.datamodel.BlackboardArtifact;
 import org.sleuthkit.datamodel.TskCoreException;
@@ -40,7 +43,6 @@ public class KwsAnalysisResultIngestModule implements AnalysisResultIngestModule
     private static final Logger LOGGER = Logger.getLogger(KeywordSearchIngestModule.class.getName());
     private static final int TSK_KEYWORD_HIT_TYPE_ID = BlackboardArtifact.Type.TSK_KEYWORD_HIT.getTypeID();
     private IngestJobContext context;
-    private KeywordSearchService searchService;
     private final KeywordSearchJobSettings settings;
 
     KwsAnalysisResultIngestModule(KeywordSearchJobSettings settings) {
@@ -50,16 +52,24 @@ public class KwsAnalysisResultIngestModule implements AnalysisResultIngestModule
     @Override
     public void startUp(IngestJobContext context) throws IngestModule.IngestModuleException {
         this.context = context;
-        searchService = Lookup.getDefault().lookup(KeywordSearchService.class);
     }
 
     @Override
     public IngestModule.ProcessResult process(AnalysisResult result) {
         try {
             if (result.getType().getTypeID() != TSK_KEYWORD_HIT_TYPE_ID) {
-                searchService.index(result);
+                Ingester ingester = Ingester.getDefault();
+                Reader blackboardExtractedTextReader = KeywordSearchUtil.getReader(result);
+                String sourceName = result.getDisplayName() + "_" + result.getArtifactID();
+                ingester.indexMetaDataOnly(result, sourceName);
+                ingester.indexTextAndSearch(blackboardExtractedTextReader, 
+                        result.getArtifactID(), 
+                        sourceName, result, 
+                        context, 
+                        settings.isIndexToSolrEnabled(), 
+                        settings.getNamesOfEnabledKeyWordLists());
             }
-        } catch (TskCoreException ex) {
+        } catch (TskCoreException | TextExtractorFactory.NoTextExtractorFound | TextExtractor.InitReaderException | Ingester.IngesterException ex) {
             LOGGER.log(Level.SEVERE, String.format("Error indexing analysis result '%s' (job ID=%d)", result, context.getJobId()), ex); //NON-NLS
             return IngestModule.ProcessResult.ERROR;
         }
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KwsDataArtifactIngestModule.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KwsDataArtifactIngestModule.java
index 74e81801f618844730fccee753602b3a4fa23d77..4f0659b0e99a579d3202cd0337f22e1fbcddfb45 100755
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KwsDataArtifactIngestModule.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KwsDataArtifactIngestModule.java
@@ -18,12 +18,16 @@
  */
 package org.sleuthkit.autopsy.keywordsearch;
 
+import java.io.Reader;
 import java.util.logging.Level;
+import org.openide.util.Exceptions;
 import org.openide.util.Lookup;
 import org.sleuthkit.autopsy.coreutils.Logger;
 import org.sleuthkit.autopsy.ingest.DataArtifactIngestModule;
 import org.sleuthkit.autopsy.ingest.IngestJobContext;
 import org.sleuthkit.autopsy.keywordsearchservice.KeywordSearchService;
+import org.sleuthkit.autopsy.textextractors.TextExtractor;
+import org.sleuthkit.autopsy.textextractors.TextExtractorFactory;
 import org.sleuthkit.datamodel.BlackboardArtifact;
 import org.sleuthkit.datamodel.DataArtifact;
 import org.sleuthkit.datamodel.TskCoreException;
@@ -39,7 +43,6 @@ public class KwsDataArtifactIngestModule implements DataArtifactIngestModule {
     private static final Logger LOGGER = Logger.getLogger(KeywordSearchIngestModule.class.getName());
     private static final int TSK_ASSOCIATED_OBJECT_TYPE_ID = BlackboardArtifact.Type.TSK_ASSOCIATED_OBJECT.getTypeID();
     private IngestJobContext context;
-    private KeywordSearchService searchService;
     private final KeywordSearchJobSettings settings;
 
     KwsDataArtifactIngestModule(KeywordSearchJobSettings settings) {
@@ -49,19 +52,27 @@ public class KwsDataArtifactIngestModule implements DataArtifactIngestModule {
     @Override
     public void startUp(IngestJobContext context) throws IngestModuleException {
         this.context = context;
-        searchService = Lookup.getDefault().lookup(KeywordSearchService.class);
     }
 
     @Override
     public ProcessResult process(DataArtifact artifact) {
         try {
             if (artifact.getType().getTypeID() != TSK_ASSOCIATED_OBJECT_TYPE_ID) {
-                searchService.index(artifact);
+                Ingester ingester = Ingester.getDefault();
+                Reader blackboardExtractedTextReader = KeywordSearchUtil.getReader(artifact);
+                String sourceName = artifact.getDisplayName() + "_" + artifact.getArtifactID();
+                ingester.indexMetaDataOnly(artifact, sourceName);
+                ingester.indexTextAndSearch(blackboardExtractedTextReader, 
+                        artifact.getArtifactID(), 
+                        sourceName, artifact, 
+                        context, 
+                        settings.isIndexToSolrEnabled(), 
+                        settings.getNamesOfEnabledKeyWordLists());
             }
-        } catch (TskCoreException ex) {
+        } catch (TskCoreException | TextExtractorFactory.NoTextExtractorFound | TextExtractor.InitReaderException | Ingester.IngesterException ex) {
             LOGGER.log(Level.SEVERE, String.format("Error indexing data artifact '%s' (job ID=%d)", artifact, context.getJobId()), ex); //NON-NLS
             return ProcessResult.ERROR;
-        }
+        } 
         return ProcessResult.OK;
     }
 
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/RegexQuery.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/RegexQuery.java
index b68bb7d82e24f928407fe4355e41d0a40b139ada..3d830489cca7384daa5063608a33f8e023e184fe 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/RegexQuery.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/RegexQuery.java
@@ -589,7 +589,11 @@ public static BlackboardArtifact createKeywordHitArtifact(Content content,  Keyw
         );
 
         if (originalKW.searchTermIsLiteral()) {
-            attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_KEYWORD_SEARCH_TYPE, MODULE_NAME, KeywordSearch.QueryType.SUBSTRING.ordinal()));
+            if(!originalKW.searchTermIsWholeWord()) {
+                attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_KEYWORD_SEARCH_TYPE, MODULE_NAME, KeywordSearch.QueryType.SUBSTRING.ordinal()));
+            } else {
+                attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_KEYWORD_SEARCH_TYPE, MODULE_NAME, KeywordSearch.QueryType.LITERAL.ordinal()));
+            }
         } else {
             attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_KEYWORD_SEARCH_TYPE, MODULE_NAME, KeywordSearch.QueryType.REGEX.ordinal()));
         }
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java
index 2d56a938df19973c2c8d0665da59aff8e96eb023..7613538764c418b686fc40e123fbe804ef93795c 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java
@@ -93,8 +93,7 @@ public void index(Content content) throws TskCoreException {
                 return;
             }
             try {
-                TextExtractor blackboardExtractor = TextExtractorFactory.getExtractor(content, null);
-                Reader blackboardExtractedTextReader = blackboardExtractor.getReader();
+                Reader blackboardExtractedTextReader = KeywordSearchUtil.getReader(content);
                 String sourceName = artifact.getDisplayName() + "_" + artifact.getArtifactID();
                 ingester.indexMetaDataOnly(artifact, sourceName);
                 ingester.indexTextAndSearch(blackboardExtractedTextReader, artifact.getArtifactID(), sourceName, content, null, true, null);
@@ -103,18 +102,11 @@ public void index(Content content) throws TskCoreException {
             }
         } else {
             try {
-                TextExtractor contentExtractor = TextExtractorFactory.getExtractor(content, null);
-                Reader contentExtractedTextReader = contentExtractor.getReader();
-                ingester.indexTextAndSearch(contentExtractedTextReader, content.getId(), content.getName(), content, null, true, null);
+                
+                Reader reader = KeywordSearchUtil.getReader(content);
+                ingester.indexTextAndSearch(reader, content.getId(), content.getName(), content, null, true, null);
             } catch (TextExtractorFactory.NoTextExtractorFound | Ingester.IngesterException | TextExtractor.InitReaderException ex) {
-                try {
-                    // Try the StringsTextExtractor if Tika extractions fails.
-                    TextExtractor stringsExtractor = TextExtractorFactory.getStringsExtractor(content, null);
-                    Reader stringsExtractedTextReader = stringsExtractor.getReader();
-                    ingester.indexStrings(stringsExtractedTextReader, content.getId(), content.getName(), content, null, true);
-                } catch (Ingester.IngesterException | TextExtractor.InitReaderException ex1) {
-                    throw new TskCoreException("Error indexing content", ex1);
-                }
+                throw new TskCoreException("Error indexing content", ex);
             }
             // only do a Solr commit if ingest is not running. If ingest is running, the changes will 
             // be committed via a periodic commit or via final commit after the ingest job has finished.
diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java
index 088af9f4b2e876262c86ecabdb341493d9020aeb..4dfcdd2193fc35b68785b9e634436c4a08081438 100644
--- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java
+++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java
@@ -422,13 +422,13 @@ private void analyzeRegistryFiles(long ingestJobId) {
                             "RegRipper " + regFile.getUniquePath(), regFile); //NON-NLS
 
                     // Index the report content so that it will be available for keyword search.
-                    KeywordSearchService searchService = Lookup.getDefault().lookup(KeywordSearchService.class);
-                    if (null == searchService) {
-                        logger.log(Level.WARNING, "Keyword search service not found. Report will not be indexed");
-                    } else {
-                        searchService.index(report);
-                        report.close();
-                    }
+//                    KeywordSearchService searchService = Lookup.getDefault().lookup(KeywordSearchService.class);
+//                    if (null == searchService) {
+//                        logger.log(Level.WARNING, "Keyword search service not found. Report will not be indexed");
+//                    } else {
+//                        searchService.index(report);
+//                        report.close();
+//                    }
                 } catch (TskCoreException e) {
                     this.addErrorMessage("Error adding regripper output as Autopsy report: " + e.getLocalizedMessage()); //NON-NLS
                 }