How to create a faceted search/facet filter in Craft Commerce I want to create these kinds of filters on my Craft Commerce site:

I have poked around with the Faceted Navigation plugin, but haven't gotten it to work the way I want yet (posted an issue about high bandwidth usage) (Fixed in version 1.1.80), and it seems to work nicely- and it's quite fast. However, I wanted to check out 3rd party enterprise search as-a-service.
I also see there is pretty good support for a third party enterprise search service called Algolia through the Scout and Algolia plugins. I have no previous experience with Algolia, but it seems that they should be able to spit out these kinds of filters.
There also seems to be a somewhat abandonned plugin called Search Plus (which I believe stalled at Craft 2.5) and the ElasticSearch-plugin which also seems to be stalled because of a dependency on a YII2-&gt;ElasticSearch plugin.
So... should I build my own? NyStudio107 talks about using React with the GraphQL API or the Element API and Webstoemp has an example of building this using Twig.
How would you go about doing this?
Algolia is excellent, and I've found the scout plugin to be solid. Algolia will give you pre-built faceted navigation with instantsearch.js so there is very little development time.

Elastic search comes with the added complexity of running/configuring an ES server, will likely require on-going maintenance.

However if you have the time and don't want to rely on 3rd parties, I would recommend just DIY with twig. If you want it to refresh the listing 'live' you can use Sprig, or htmx.
Basically your filters/facets will be a form that passes a query string to your listing page. Your listing page will then check for the query string and filter accordingly.
An example from a recent project:
{# Get any URL Parameters #}

{% set keywords = craft.app.request.getParam('q')|default(null) %}
{% set kind = craft.app.request.getParam('kind')|default('*') %}
{% set order = craft.app.request.getParam('order')|default('title asc') %}

{# Run the query #}

{% set query = entries
  .search(keywords)
  .kind(kind)
  .orderBy(order)
  .limit(30)
%}

The difficulty will be the UI for sliders etc, but there are plenty of libraries for this kind of thing.