I've had to build something similar in a previous role, here's what worked for me:
Start by organising the data you're searching with appropriate categorisation, tagging and other methods. Where to start though? I've found what works best is to start with your desired experience and slowly work back from there, stepping through it with your user goals in mind and iterating as you solve usability problems, documenting as you go.
For me, this showed what categorisation was needed to make a usable search of that particular data set it also gave you an mvp for the search. So you may start with a bunch of data that is not categorised in any meaningful way, or perhaps it is categorised but in a way that's meaningful to a database eningeer, or to the business but not your users.
To make something easily searchable you first need to break it down in digestible chunks - in your users scenario what information would assist them in finding what they are looking for? Run through as many user goals and scenarios as possible, use your findings to decide how the IA could be improved to assist users in their searches, this might look like:
- A new set of categories and sub categories more suited to this user journey (use parent/child relationships in categories where appropriate)
- A set of content types, to break down the types of data available
- A set of tags, that span across categories carrying common themes
Search & UI
Now that your data is organised in a meaningful way this part should be much simpler, allow usable and easy filters of these areas (Content types, categories, tags, etc) and other defining meta data such as date, user, anything else that is relevant
It's important to represent the important information as usable filters but also on each search result item, without over crowding - the user should be able to glance at a search result and quickly know where it sits and if they are on the right track, remember users will often iterate on their search terms if they feel they're not getting useful results.
Getting a little more technical now, but the result ordering and keyword highlighting is important to note here, you want results returned in order of relevance based on the users search input your users are likely looking for one or a few search items in a database of thousands of items, it's your job to make that a painless experience
Don't forget that user goals and business goals will vary, but the principle of defining your user and business goals and iterating through the end to end user journey with those in mind will help you produce something that works in your scenario.