asciimoo 11 лет назад
Родитель
Сommit
e2c1c10657
1 измененных файлов: 14 добавлений и 2 удалений
  1. 14
    2
      searx/engines/__init__.py

+ 14
- 2
searx/engines/__init__.py Просмотреть файл

69
             print '[E] Engine config error: Missing attribute "{0}.{1}"'.format(engine.name, engine_attr)
69
             print '[E] Engine config error: Missing attribute "{0}.{1}"'.format(engine.name, engine_attr)
70
             sys.exit(1)
70
             sys.exit(1)
71
     engines[engine.name] = engine
71
     engines[engine.name] = engine
72
-    engine.stats = {'result_count': 0, 'search_count': 0, 'page_load_time': 0}
72
+    engine.stats = {'result_count': 0, 'search_count': 0, 'page_load_time': 0, 'score_count': 0}
73
     if hasattr(engine, 'categories'):
73
     if hasattr(engine, 'categories'):
74
         for category_name in engine.categories:
74
         for category_name in engine.categories:
75
             categories.setdefault(category_name, []).append(engine)
75
             categories.setdefault(category_name, []).append(engine)
136
     for i,res in enumerate(flat_res):
136
     for i,res in enumerate(flat_res):
137
         res['parsed_url'] = urlparse(res['url'])
137
         res['parsed_url'] = urlparse(res['url'])
138
         score = (flat_len - i)*settings.weights.get(res['engine'], 1)
138
         score = (flat_len - i)*settings.weights.get(res['engine'], 1)
139
+        engines[res['engine']].stats['score_count'] += score
139
         duplicated = False
140
         duplicated = False
140
         for new_res in results:
141
         for new_res in results:
141
             if res['parsed_url'].netloc == new_res['parsed_url'].netloc and\
142
             if res['parsed_url'].netloc == new_res['parsed_url'].netloc and\
163
 def get_engines_stats():
164
 def get_engines_stats():
164
     pageloads = []
165
     pageloads = []
165
     results = []
166
     results = []
167
+    scores = []
166
 
168
 
167
-    max_pageload = max_results = 0
169
+    max_pageload = max_results = max_score = 0
168
     for engine in engines.values():
170
     for engine in engines.values():
169
         if engine.stats['search_count'] == 0:
171
         if engine.stats['search_count'] == 0:
170
             continue
172
             continue
171
         results_num = engine.stats['result_count']/float(engine.stats['search_count'])
173
         results_num = engine.stats['result_count']/float(engine.stats['search_count'])
172
         load_times  = engine.stats['page_load_time']/float(engine.stats['search_count'])
174
         load_times  = engine.stats['page_load_time']/float(engine.stats['search_count'])
175
+        if results_num:
176
+            score = engine.stats['score_count'] / float(engine.stats['search_count']) / results_num
177
+        else:
178
+            score = 0
173
         max_results = max(results_num, max_results)
179
         max_results = max(results_num, max_results)
174
         max_pageload = max(load_times, max_pageload)
180
         max_pageload = max(load_times, max_pageload)
181
+        max_score = max(score, max_score)
175
         pageloads.append({'avg': load_times, 'name': engine.name})
182
         pageloads.append({'avg': load_times, 'name': engine.name})
176
         results.append({'avg': results_num, 'name': engine.name})
183
         results.append({'avg': results_num, 'name': engine.name})
184
+        scores.append({'avg': score, 'name': engine.name})
177
 
185
 
178
     for engine in pageloads:
186
     for engine in pageloads:
179
         engine['percentage'] = int(engine['avg']/max_pageload*100)
187
         engine['percentage'] = int(engine['avg']/max_pageload*100)
181
     for engine in results:
189
     for engine in results:
182
         engine['percentage'] = int(engine['avg']/max_results*100)
190
         engine['percentage'] = int(engine['avg']/max_results*100)
183
 
191
 
192
+    for engine in scores:
193
+        engine['percentage'] = int(engine['avg']/max_score*100)
194
+
184
 
195
 
185
     return [('Page loads (sec)', sorted(pageloads, key=itemgetter('avg'), reverse=True))
196
     return [('Page loads (sec)', sorted(pageloads, key=itemgetter('avg'), reverse=True))
186
            ,('Number of results', sorted(results, key=itemgetter('avg'), reverse=True))
197
            ,('Number of results', sorted(results, key=itemgetter('avg'), reverse=True))
198
+           ,('Scores', sorted(scores, key=itemgetter('avg'), reverse=True))
187
            ]
199
            ]