|
@@ -329,8 +329,8 @@ class Search(object):
|
329
|
329
|
self.blocked_engines = get_blocked_engines(engines, request.cookies)
|
330
|
330
|
|
331
|
331
|
self.results = []
|
332
|
|
- self.suggestions = []
|
333
|
|
- self.answers = []
|
|
332
|
+ self.suggestions = set()
|
|
333
|
+ self.answers = set()
|
334
|
334
|
self.infoboxes = []
|
335
|
335
|
self.request_data = {}
|
336
|
336
|
|
|
@@ -429,9 +429,6 @@ class Search(object):
|
429
|
429
|
requests = []
|
430
|
430
|
results_queue = Queue()
|
431
|
431
|
results = {}
|
432
|
|
- suggestions = set()
|
433
|
|
- answers = set()
|
434
|
|
- infoboxes = []
|
435
|
432
|
|
436
|
433
|
# increase number of searches
|
437
|
434
|
number_of_searches += 1
|
|
@@ -511,7 +508,7 @@ class Search(object):
|
511
|
508
|
selected_engine['name']))
|
512
|
509
|
|
513
|
510
|
if not requests:
|
514
|
|
- return results, suggestions, answers, infoboxes
|
|
511
|
+ return self
|
515
|
512
|
# send all search-request
|
516
|
513
|
threaded_requests(requests)
|
517
|
514
|
|
|
@@ -519,19 +516,19 @@ class Search(object):
|
519
|
516
|
engine_name, engine_results = results_queue.get_nowait()
|
520
|
517
|
|
521
|
518
|
# TODO type checks
|
522
|
|
- [suggestions.add(x['suggestion'])
|
|
519
|
+ [self.suggestions.add(x['suggestion'])
|
523
|
520
|
for x in list(engine_results)
|
524
|
521
|
if 'suggestion' in x
|
525
|
522
|
and engine_results.remove(x) is None]
|
526
|
523
|
|
527
|
|
- [answers.add(x['answer'])
|
|
524
|
+ [self.answers.add(x['answer'])
|
528
|
525
|
for x in list(engine_results)
|
529
|
526
|
if 'answer' in x
|
530
|
527
|
and engine_results.remove(x) is None]
|
531
|
528
|
|
532
|
|
- infoboxes.extend(x for x in list(engine_results)
|
533
|
|
- if 'infobox' in x
|
534
|
|
- and engine_results.remove(x) is None)
|
|
529
|
+ self.infoboxes.extend(x for x in list(engine_results)
|
|
530
|
+ if 'infobox' in x
|
|
531
|
+ and engine_results.remove(x) is None)
|
535
|
532
|
|
536
|
533
|
results[engine_name] = engine_results
|
537
|
534
|
|
|
@@ -541,16 +538,16 @@ class Search(object):
|
541
|
538
|
engines[engine_name].stats['result_count'] += len(engine_results)
|
542
|
539
|
|
543
|
540
|
# score results and remove duplications
|
544
|
|
- results = score_results(results)
|
|
541
|
+ self.results = score_results(results)
|
545
|
542
|
|
546
|
543
|
# merge infoboxes according to their ids
|
547
|
|
- infoboxes = merge_infoboxes(infoboxes)
|
|
544
|
+ self.infoboxes = merge_infoboxes(self.infoboxes)
|
548
|
545
|
|
549
|
546
|
# update engine stats, using calculated score
|
550
|
|
- for result in results:
|
|
547
|
+ for result in self.results:
|
551
|
548
|
for res_engine in result['engines']:
|
552
|
549
|
engines[result['engine']]\
|
553
|
550
|
.stats['score_count'] += result['score']
|
554
|
551
|
|
555
|
552
|
# return results, suggestions, answers and infoboxes
|
556
|
|
- return results, suggestions, answers, infoboxes
|
|
553
|
+ return self
|