浏览代码

[enh] search query highlight in result texts

asciimoo 11 年前
父节点
当前提交
14a53e3430
共有 1 个文件被更改,包括 13 次插入0 次删除
  1. 13
    0
      searx/engines/__init__.py

+ 13
- 0
searx/engines/__init__.py 查看文件

@@ -83,6 +83,7 @@ def default_request_params():
83 83
     return {'method': 'GET', 'headers': {}, 'data': {}, 'url': '', 'cookies': {}}
84 84
 
85 85
 def make_callback(engine_name, results, callback, params):
86
+    # creating a callback wrapper for the search engine results
86 87
     def process_callback(response, **kwargs):
87 88
         cb_res = []
88 89
         response.search_params = params
@@ -100,6 +101,16 @@ def make_callback(engine_name, results, callback, params):
100 101
         results[engine_name] = cb_res
101 102
     return process_callback
102 103
 
104
+def highlight_content(content, query):
105
+    # ignoring html contents
106
+    # TODO better html content detection
107
+    if content.find('<') != -1:
108
+        return content
109
+    for chunk in query.split():
110
+        content = content.replace(chunk, '<b>{0}</b>'.format(chunk))
111
+
112
+    return content
113
+
103 114
 def search(query, request, selected_engines):
104 115
     global engines, categories, number_of_searches
105 116
     requests = []
@@ -176,6 +187,8 @@ def search(query, request, selected_engines):
176 187
             results.append(res)
177 188
 
178 189
     for result in results:
190
+        if 'content' in result:
191
+            result['content'] = highlight_content(result['content'], query)
179 192
         for res_engine in result['engines']:
180 193
             engines[result['engine']].stats['score_count'] += result['score']
181 194