Our search solution is based on Elastic App Search, which provides:

What is being indexed by the search engine?

The search engine indexes releases, actors, series, and, optionally, tracks.

How do I access the management interface?

Log in to the elastic cloud using your credentials. Once logged in you can see the available instances, create new ones, or delete existing instances.

To open the App Search interface, open the relevant instance in the elastic cloud, then open "Enterprise Search".

How does data get indexed by the search engine?

The flow starts with a client who supplies release data in ONIX or an alternative source format to an ingestion pipeline in deliveryservice.

Deliveryservice places the request on a queue to be processed. Once a deliveryworker is free, the job will be picked up from the queue. How long this takes depends on how much content is being ingested at a given moment. A step in the ingestion pipeline entails ingesting the content into catalogservice. At this point deliveryworker sends an HTTP request to catalogservice with the release data encoded in a JSON payload.

When catalogservice receives the ingestion request, it adds the release along with the relevant actors, series, and tracks to its database. At the same time, the content is passed to App Search. The release becomes searchable as soon as it is made available in the catalog.

How do I improve the relevance of search results?

App Search provides good search results by default. However, it also provides the necessary tools to achieve even better search results tailored to your service, provided you are willing to put in some effort. Tuning search relevance is a vast topic, so this document will only cover some basic principles.

The first step to improve search results is to do global relevance tuning. Elastic documentation covers this here.

Specifically, it is a good idea to set fields that should not be searchable (audience_age_from, shops, release_id, etc.) to not be available for text search (disable entirely, or give a weight 0). Some fields are more important than others, which should be reflected by the weights. For example, "title" should probably have a larger weight than "description". Finding suitable weights can be quite tricky and might require some experimentation. Some tips are to have a list of search terms you want to optimize for and to make very small changes to the weights. Go through the search terms multiple times and try to find weights that give the best results for a majority of the search terms. Some terms may be difficult to get good results wit, which is fine. These terms can be handled manually.

App Search provides two ways to manually tune search results: synonyms and curation.