Search index is created by adding a automatically populated search vector column to each searchable table in Postgres and appropriate SQLAlchemy models. Left Algolia partly because our old implementation was poorly done, overly complicated, and becoming difficult to maintain, but also because Postgres FTS could give us equivalent search capabilities (we didn't need all the features Algolia had to offer) for free.
https://sqlalchemy-searchable.readthedocs.io/en/latest/insta...
had us easily swap out Algolia for search with Postgres FTS.