MIT-LCP / physionet-build

The new PhysioNet platform.
https://physionet.org/
BSD 3-Clause "New" or "Revised" License
55 stars 20 forks source link

Improve search functionality for projects #1971

Open tompollard opened 1 year ago

tompollard commented 1 year ago

Currently we display a search tool at https://physionet.org/content/ (and also in the right of the site header). The tool is basically unusable right now, because (1) it does exact matching on single words and (2) the results are not weighted, meaning top matches get lost in noise.

e.g. try searching for "mimic database" and the results are not what you expect: https://physionet.org/content/?topic=mimic+database (first hit is "Lobachevsky University Electrocardiography Database")

We should consider swapping out the current search backend to something a little more sophisticated (e.g. supports fuzzy matching, takes into account relevance/match density in order of results).

tompollard commented 1 year ago

@amitupreti @Rutvikrj26 I wonder whether it makes sense for the search to sit on top of the new project API (https://github.com/MIT-LCP/physionet-build/pull/1697)?

This might help us to move towards a cross-site search later (e.g. a search tool that returns results from both PhysioNet and Health Data Nexus)?

Side note, but when speaking to someone recently about API design, they strongly recommended following the OpenAPI spec (https://www.openapis.org/).

amitupreti commented 1 year ago

Yeah , totally, this sounds like a good idea to me. I will catchup with @Rutvikrj26 on how to move ahead with this, as i remember he is already working on api here https://github.com/MIT-LCP/physionet-build/issues/1885

bemoody commented 1 year ago

See also: #349

Rutvikrj26 commented 1 year ago

I discussed this with @amitupreti, and we've decided to add an API endpoint that talks in the Post request, calls the search function, and returns the results, which will then be serialized to show in the output.

This will enable integration of the Cross-Site search functionality via API, as @tompollard mentioned.