Should I go the Postgres/Elasticsearch route or are somewhat out-of-the-box solutions available?
Should I go the Postgres/Elasticsearch route or are somewhat out-of-the-box solutions available?
Elasticsearch is heavy, and relational databases with search bolted on (like Postgres or SQLite) aren't great.
Here's a git repo someone can modify to do a cross comparison on a specific dataset, if they are interested. It doesn't seem to indicate the RMDBs are outclassed in a small-scale FTS implementation.
Typesense
[timing] phrase [superman]: returned [28] results in 4.222797.ms
[timing] phrase [suprman]: returned [28] results in 3.663458.ms
SQLite [timing] phrase [superman]: returned [47] results in 0.351138.ms
[timing] phrase [suprman]: returned [0] results in 0.07513.ms
So SQLite is faster, but who cares? I want things like relevance and typo resilience without having to configure anything.This adds a step between query entry and text search where you find the similarity of query words to unique lexemes if the word is not a lexeme. Seems like a reasonable compromise to me?
Podcastsaver.com (click on the nerds tab in the top right)
Never got to it but there are a bunch of other search engines worth adding — Sonic, Typesense, etc. Maybe some day
I haven't finished getting it set up though, so take this recommendation with a hefty grain of salt.
Scraping is a separate subject, but once you write one you can generally reuse relevant portions for many others. If you can get adept at a scraping framework like Scrapy you can do it fairly quickly, but there aren't many tools that work out of the box for every site you'll encounter.
Once you've written the spider, it's generally able to be rerun for updates unless the site code is dramatically altered. It really comes down to how brittle the spider is coded (i.e. hunting for specific heading sizes or fonts or something) instead of grabbing the underlying JSON/XHR that doesn't usually change frequently.
https://github.com/mozilla/readability
Btw, readability, is also available in few other languages like Kotlin: