summaryrefslogtreecommitdiff
path: root/searx/results.py
diff options
context:
space:
mode:
Diffstat (limited to 'searx/results.py')
-rw-r--r--searx/results.py21
1 files changed, 14 insertions, 7 deletions
diff --git a/searx/results.py b/searx/results.py
index 8b248f8e0..b846eb275 100644
--- a/searx/results.py
+++ b/searx/results.py
@@ -130,16 +130,25 @@ def merge_two_infoboxes(infobox1, infobox2): # pylint: disable=too-many-branche
infobox1['content'] = content2
-def result_score(result):
+def result_score(result, priority):
weight = 1.0
for result_engine in result['engines']:
if hasattr(engines[result_engine], 'weight'):
weight *= float(engines[result_engine].weight)
- occurrences = len(result['positions'])
+ weight *= len(result['positions'])
+ score = 0
- return sum((occurrences * weight) / position for position in result['positions'])
+ for position in result['positions']:
+ if priority == 'low':
+ continue
+ if priority == 'high':
+ score += weight
+ else:
+ score += weight / position
+
+ return score
class Timing(NamedTuple): # pylint: disable=missing-class-docstring
@@ -354,9 +363,7 @@ class ResultContainer:
self._closed = True
for result in self._merged_results:
- score = result_score(result)
- result['score'] = score
-
+ result['score'] = result_score(result, result.get('priority'))
# removing html content and whitespace duplications
if result.get('content'):
result['content'] = utils.html_to_text(result['content']).strip()
@@ -364,7 +371,7 @@ class ResultContainer:
result['title'] = ' '.join(utils.html_to_text(result['title']).strip().split())
for result_engine in result['engines']:
- counter_add(score, 'engine', result_engine, 'score')
+ counter_add(result['score'], 'engine', result_engine, 'score')
results = sorted(self._merged_results, key=itemgetter('score'), reverse=True)