on master help sign in
[enh] engine score weight support @ config and engines
6d956a7asciimoo
searx/engines/__init__.py+13−8
@@ -51,20 +51,20 @@ if not engines_config.sections():
51 print '[E] Error no engines found. Edit your engines.cfg'
51 print '[E] Error no engines found. Edit your engines.cfg'
52 exit(2)
52 exit(2)
53
53
54−for section in engines_config.sections():
54+for engine_config_name in engines_config.sections():
55− engine_data = engines_config.options(section)
55+ engine_data = engines_config.options(engine_config_name)
56− engine = load_module(engines_config.get(section, 'engine')+'.py')
56+ engine = load_module(engines_config.get(engine_config_name, 'engine')+'.py')
57− engine.name = section
57+ engine.name = engine_config_name
58 for param_name in engine_data:
58 for param_name in engine_data:
59 if param_name == 'engine':
59 if param_name == 'engine':
60 continue
60 continue
61 if param_name == 'categories':
61 if param_name == 'categories':
62− if engines_config.get(section, param_name) == 'none':
62+ if engines_config.get(engine_config_name, param_name) == 'none':
63 engine.categories = []
63 engine.categories = []
64 else:
64 else:
65− engine.categories = map(str.strip, engines_config.get(section, param_name).split(','))
65+ engine.categories = map(str.strip, engines_config.get(engine_config_name, param_name).split(','))
66 continue
66 continue
67− setattr(engine, param_name, engines_config.get(section, param_name))
67+ setattr(engine, param_name, engines_config.get(engine_config_name, param_name))
68 for engine_attr in dir(engine):
68 for engine_attr in dir(engine):
69 if engine_attr.startswith('_'):
69 if engine_attr.startswith('_'):
70 continue
70 continue
@@ -161,7 +161,12 @@ def search(query, request, selected_engines):
161 for i,res in enumerate(flat_res):
161 for i,res in enumerate(flat_res):
162 res['parsed_url'] = urlparse(res['url'])
162 res['parsed_url'] = urlparse(res['url'])
163 res['engines'] = [res['engine']]
163 res['engines'] = [res['engine']]
164+ weight = 1.0
165+ if hasattr(engines[res['engine']], 'weight'):
166+ weight = float(engines[res['engine']].weight)
167+ elif res['engine'] in settings.weights:
168+ weight = float(settings.weights[res['engine']])
164− score = int((flat_len - i)/engines_len)*settings.weights.get(res['engine'], 1)+1
169+ score = int((flat_len - i)/engines_len)*weight+1
165 duplicated = False
170 duplicated = False
166 for new_res in results:
171 for new_res in results:
167 p1 = res['parsed_url'].path[:-1] if res['parsed_url'].path.endswith('/') else res['parsed_url'].path
172 p1 = res['parsed_url'].path[:-1] if res['parsed_url'].path.endswith('/') else res['parsed_url'].path