--- a/Allura/allura/lib/search.py
+++ b/Allura/allura/lib/search.py
@@ -1,4 +1,5 @@
 import re
+import socket
 import cPickle as pickle
 from logging import getLogger
 from pprint import pformat
@@ -6,7 +7,7 @@
 
 import markdown
 from pylons import c,g
-import pysolr
+from pysolr import SolrError
 
 from . import helpers as h
 from .markdown_extensions import ForgeExtension
@@ -26,14 +27,20 @@
     doc['text'] = text
     return doc
 
-def search(q,short_timeout=False,**kw):
+class SearchError(SolrError):
+    pass
+
+def search(q,short_timeout=False,ignore_errors=True,**kw):
     try:
         if short_timeout:
             return g.solr_short_timeout.search(q, **kw)
         else:
             return g.solr.search(q, **kw)
-    except pysolr.SolrError as e:
+    except (SolrError, socket.error) as e:
         log.exception('Error in solr indexing')
+        if not ignore_errors:
+            match = re.search(r'<pre>(.*)</pre>', str(e))
+            raise SearchError('Error running search query: %s' % (match.group(1) if match else e))
 
 def search_artifact(atype, q, history=False, rows=10, short_timeout=False, **kw):
     """Performs SOLR search.
@@ -52,13 +59,7 @@
         'mount_point_s:%s' % c.app.config.options.mount_point ]
     if not history:
         fq.append('is_history_b:False')
-    try:
-        if short_timeout:
-            return g.solr_short_timeout.search(q, fq=fq, rows=rows, **kw)
-        else:
-            return g.solr.search(q, fq=fq, rows=rows, **kw)
-    except pysolr.SolrError, e:
-        raise ValueError('Error running search query: %s' % e.message)
+    return search(q, fq=fq, rows=rows, short_timeout=short_timeout, ignore_errors=False, **kw)
 
 def find_shortlinks(text):
     md = markdown.Markdown(