Browse Source

[enh] search query highlight in result texts

asciimoo 11 years ago
parent
commit
14a53e3430
1 changed files with 13 additions and 0 deletions
  1. 13 0
      searx/engines/__init__.py

+ 13 - 0
searx/engines/__init__.py

@@ -83,6 +83,7 @@ def default_request_params():
     return {'method': 'GET', 'headers': {}, 'data': {}, 'url': '', 'cookies': {}}
 
 def make_callback(engine_name, results, callback, params):
+    # creating a callback wrapper for the search engine results
     def process_callback(response, **kwargs):
         cb_res = []
         response.search_params = params
@@ -100,6 +101,16 @@ def make_callback(engine_name, results, callback, params):
         results[engine_name] = cb_res
     return process_callback
 
+def highlight_content(content, query):
+    # ignoring html contents
+    # TODO better html content detection
+    if content.find('<') != -1:
+        return content
+    for chunk in query.split():
+        content = content.replace(chunk, '<b>{0}</b>'.format(chunk))
+
+    return content
+
 def search(query, request, selected_engines):
     global engines, categories, number_of_searches
     requests = []
@@ -176,6 +187,8 @@ def search(query, request, selected_engines):
             results.append(res)
 
     for result in results:
+        if 'content' in result:
+            result['content'] = highlight_content(result['content'], query)
         for res_engine in result['engines']:
             engines[result['engine']].stats['score_count'] += result['score']