diff --git a/dspback/routers/discovery.py b/dspback/routers/discovery.py index b1a53fc..a8c0402 100644 --- a/dspback/routers/discovery.py +++ b/dspback/routers/discovery.py @@ -84,15 +84,8 @@ async def search( } }, ) - - if term: - stages[0]['$search']['highlight'] = {'path': search_paths} - # get only results which meet minimum relevance score threshold - score_threshold = get_settings().search_relevance_score_threshold - stages.append({'$match': {'score': {'$gt': score_threshold}}}) stages[0]['$search']['count'] = {'type': 'total'} - - stages.append({'$project': {'meta': "$$SEARCH_META", + stages.append({'$project': {'meta': "$$SEARCH_META", '_id': 0, '@context': 1, 'repository_identifier': 1, @@ -112,19 +105,27 @@ async def search( 'relations': 1, 'legacy': 1, 'clusters': 1, - 'score': 1, - 'highlights': {'$meta': 'searchHighlights'} + 'score': 1 } }) + if term: + stages[0]['$search']['highlight'] = {'path': search_paths} + # get only results which meet minimum relevance score threshold + score_threshold = get_settings().search_relevance_score_threshold + stages.append({'$match': {'score': {'$gt': score_threshold}}}) + for stage in stages: + if '$project' in stage: + stage['$project']['highlights'] = {'$meta': 'searchHighlights'} + break + results = await request.app.db[get_settings().mongo_database]["discovery"].aggregate(stages).to_list(pageSize) - if term: - meta = None - for result in results: - meta = result.pop('meta', None) - if meta: - results = {"meta": meta, "docs": results} + meta = None + for result in results: + meta = result.pop('meta', None) + if meta: + results = {"meta": meta, "docs": results} else: results = {"docs": results} return results