From 93d0f3a28b2b1553376f2b4a546ee296777548fd Mon Sep 17 00:00:00 2001 From: pkdash Date: Tue, 27 Aug 2024 18:27:48 -0400 Subject: [PATCH] [#136] number of matching records for term based search --- dspback/routers/discovery.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/dspback/routers/discovery.py b/dspback/routers/discovery.py index b82c96a..b1a53fc 100644 --- a/dspback/routers/discovery.py +++ b/dspback/routers/discovery.py @@ -90,8 +90,43 @@ async def search( # 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", + '_id': 0, + '@context': 1, + 'repository_identifier': 1, + 'url': 1, + '@type': 1, + 'provider': 1, + 'name': 1, + 'description': 1, + 'keywords': 1, + 'creator': 1, + 'funding': 1, + 'temporalCoverage': 1, + 'spatialCoverage': 1, + 'license': 1, + 'datePublished': 1, + 'dateCreated': 1, + 'relations': 1, + 'legacy': 1, + 'clusters': 1, + 'score': 1, + 'highlights': {'$meta': 'searchHighlights'} + } + }) 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} + else: + results = {"docs": results} return results