Static Sites with Elasticsearch
gizra.com
gizra.com
The big advantage of SQLite FTS is that it's really cheap to run. The index is a single static file on disk, then you add a Python process (I'm using https://github.com/simonw/datasette ) to run queries against it. Much less resource intensive than running Solr or Elasticsearch.
It also works surprisingly well - I've run FTS queries against tables that are up to around 10GB on disk and performance is great.
It's no way near as featureful as Lucene, but for small to medium sized projects it's easily good enough.
As for deployment: if the SQLite .db index file is small enough you can bundle it up as part of a static deployment, e.g. bundled in a Docker container. I've done this using Heroku, Google Cloud Run, https://fly.io/ and Zeit Now (aka Vercel).
If the content lives in a git repository you can hook up CI (or a GitHub Action) to build and publish a new copy of the SQLite index on every change.
I've started thinking of this pattern as a kind of static-dynamic site: there's dynamic server-side code but it's running in read-only containers, so you can scale it up by running more copies and if anything goes wrong you just restart the container.
https://til.simonwillison.net/ is my most recent site to use this pattern, see https://github.com/simonw/til for how it works.
I also wrote this tutorial describing the pattern a while ago: https://24ways.org/2018/fast-autocomplete-search-for-your-we...
Sphinx, the Python documentation engine, does something like that - e.g. https://datasette.readthedocs.io/en/stable/search.html?q=fts... which runs off this generated JavaScript index file: https://datasette.readthedocs.io/en/stable/searchindex.js
I've been developing a podcast hosting solution that parses the xml feed, generate static pages and prebuilds a lunr index, and for ~100 posts, it takes around 30 seconds to build server side and less than a second to download and and load on the client.
"Static site search" to me is something like adding a `<form action="https://duckduckgo.com" method="get">` text box to your site.
Your content is indeed static but your search is not: It’s handled by a service that parses your requests and produces output.
Static content on the other hand are files being served straight from the filesystem.
As for Disqus, they’re not static either, they’re just “a service for static websites”
The primary benefits are simplicity, typo tolerance and ability to expose the search engine directly to the front end without having to put it behind an ELB as described in this post for Elasticsearch.
P.S: I work on this.