浏览代码

[enh] specify search engine in queries

asciimoo 11 年前
父节点
当前提交
64cc960f9f
共有 1 个文件被更改,包括 29 次插入20 次删除
  1. 29
    20
      searx/webapp.py

+ 29
- 20
searx/webapp.py 查看文件

@@ -23,7 +23,7 @@ if __name__ == "__main__":
23 23
     path.append(realpath(dirname(realpath(__file__))+'/../'))
24 24
 
25 25
 from flask import Flask, request, render_template, url_for, Response, make_response
26
-from searx.engines import search, categories, get_engines_stats
26
+from searx.engines import search, categories, engines, get_engines_stats
27 27
 from searx import settings
28 28
 import json
29 29
 
@@ -56,6 +56,14 @@ def render(template_name, **kwargs):
56 56
             kwargs['selected_categories'] = ['general']
57 57
     return render_template(template_name, **kwargs)
58 58
 
59
+def parse_query(query):
60
+    query_engines = []
61
+    query_parts = query.split()
62
+    if query_parts[0].startswith('-') and query_parts[0][1:] in engines:
63
+        query_engines.append({'category': 'TODO', 'name': query_parts[0][1:]})
64
+        query = query.replace(query_parts[0], '', 1).strip()
65
+    return query, query_engines
66
+
59 67
 @app.route('/', methods=['GET', 'POST'])
60 68
 def index():
61 69
     global categories
@@ -66,26 +74,27 @@ def index():
66 74
     if not request_data.get('q'):
67 75
         return render('index.html')
68 76
 
69
-    query = request_data['q'].encode('utf-8')
70
-
71 77
     selected_categories = []
72
-    for pd_name,pd in request_data.items():
73
-        if pd_name.startswith('category_'):
74
-            category = pd_name[9:]
75
-            if not category in categories:
76
-                continue
77
-            selected_categories.append(category)
78
-    if not len(selected_categories):
79
-        cookie_categories = request.cookies.get('categories', '').split(',')
80
-        for ccateg in cookie_categories:
81
-            if ccateg in categories:
82
-                selected_categories.append(ccateg)
83
-    if not len(selected_categories):
84
-        selected_categories = ['general']
85 78
 
86
-    selected_engines = []
87
-    for categ in selected_categories:
88
-        selected_engines.extend({'category': categ, 'name': x.name} for x in categories[categ])
79
+    query, selected_engines = parse_query(request_data['q'].encode('utf-8'))
80
+
81
+    if not len(selected_engines):
82
+        for pd_name,pd in request_data.items():
83
+            if pd_name.startswith('category_'):
84
+                category = pd_name[9:]
85
+                if not category in categories:
86
+                    continue
87
+                selected_categories.append(category)
88
+        if not len(selected_categories):
89
+            cookie_categories = request.cookies.get('categories', '').split(',')
90
+            for ccateg in cookie_categories:
91
+                if ccateg in categories:
92
+                    selected_categories.append(ccateg)
93
+        if not len(selected_categories):
94
+            selected_categories = ['general']
95
+
96
+        for categ in selected_categories:
97
+            selected_engines.extend({'category': categ, 'name': x.name} for x in categories[categ])
89 98
 
90 99
     results = search(query, request, selected_engines)
91 100
     for result in results:
@@ -97,7 +106,7 @@ def index():
97 106
         return Response(json.dumps({'query': query, 'results': results}), mimetype='application/json')
98 107
     template = render('results.html'
99 108
                         ,results=results
100
-                        ,q=query.decode('utf-8')
109
+                        ,q=request_data['q']
101 110
                         ,selected_categories=selected_categories
102 111
                         ,number_of_results=len(results)
103 112
                         )