4 ms·
Tin: full-text search for Postgres
- Tiberium 15d agoIf anyone's curious - https://planetscale.com/docs/postgres/search/get-started#local-development-and-ci https://planetscale.com/docs/postgres/search/get-started#loc...: They're not providing a local extension with the same performance at the time - it's only offered on their cloud services. The local version https://github.com/planetscale/lead https://github.com/planetscale/lead is mainly just for testing the syntax, it doesn't have the same perf characteristics.
- noir_lord 15d agoBecoming more the norm for them, Neki is the same. Immediately rules out ever using them (though I don't currently have any problems that would benefit from that level of scale currently, have in the past though). Postgres's license allows this but for me (personally) it leaves a bad taste. Also it's not really "full-text search for Postgres" it's "full-text search for our hosted version of Postgres" so the title is a little misleading.
- samlambert 15d agowhy?
- dbbk 15d agoWhy would you need super fast search for local testing?
- zombodb 15d agoWhy don’t you like Postgres’ license? It’s as permissive as a license gets.
- noir_lord 15d agoBuilding non-open extensions on top of it, it's not the license I don't like, the bad taste is that they use something open extend it and keep part of it closed. The license allows it but on the flip side it's vendor lock-in predicated on using something open as the base. Fully proprietary no issue with that, full open, no issue with that, building proprietary on top of open is where the bad taste comes in. For completeness, it's not them specifically either, the other cloud companies do similar things and I suspect in part the reason they don't open these extensions up is because the others will but then they are doing the same thing themselves.
- zombodb 15d agoWhen one develops using open-source software they have an obligation to follow the licenses. They also have a moral obligation to be respectful of the work upon which they’re building. And they have a social obligation to help improve that software where they can. Those that develop on top of open-source have no obligation to give you their work for free. You’d be surprised as to the amount of open-source contributions TIN drove towards Postgres, LLVM, and pgrx. And you’d be speechless at the amount of upstream work across all sorts of open-source PlanetScale does. Postgres 18.6, for example, is better for you today, in part, because of TIN. You’re welcome.
- noir_lord 15d ago> You’re welcome. I didn't say thank you and don't presume I would, Planetscale acting in their own self interest by improving postgres upstream isn't deserving of thanks, any more than Intel upstreaming a bunch of Linux kernel work is or myriad other examples. Corporations acting in their self interest isn't worth giving thanks for, neither is the work of the people paid to do work on their behalf. I don't expect my employer to thank me, I expect them to pay me, I don't expect users of software I was paid to write to thank me because I did it for the money not out of altruism towards those users.
- Cyph0n 15d ago> Becoming more the norm for them, Neki is the same. Uh, isn’t this becoming the norm everywhere ever since LLMs have been trained on OSS without credit or attribution? Why wouldn’t you want to hide your stuff going forward? In my view, OSS is only going to move more and more towards one of two models: open core + proprietary functionality (e.g. MongoDB) OR open source + private tests (e.g. SQLite).
- pqdbr 15d agoThe problem is that they don’t support bare metal. I’d love to use PlanetScale in our bare metal servers.
- samlambert 15d agowe support bare metal inside AWS, GCP, and very soon Azure
- sroussey 15d agowhat do you call bare metal in my office?
- sgarland 15d agoOn-prem.
- pqdbr 15d agoSorry, i should have been clearer: bare metal here meaning any other provider like, for instance, Hetzner. We use a local provider. 10x savings when compared to AWS.
- SahAssar 15d agoThat metal does not seem very bare if it requires a coating of AWS/GCP/Azure.
- bob1029 15d agoI struggle with FTS inside SQL (SQLite and MSSQL). There is often a fairly significant impedance mismatch between the relational concerns and how the documents need to be stored. I've always preferred to use SQL as the system of record and then build/maintain an external Lucene index. Do we think these integral FTS capabilities are at the point where a hybrid architecture doesn't make sense anymore? How much customization exists in this provider?
- zombodb 15d agoI’m one of TIN’s developers and if you google my username you’ll see I’ve been in this space for a long time. The answer to your first question is simply: yes As far as your second question, what customization do you need that you believe TIN or PlanetScale doesn’t provide? These are things we can do, with alacrity.
- gfody 15d agoin my experience it’s pretty common to find big inverted indexes for text directly in the database - not necessarily large docs but certainly free text records in volume. using bm25 and unicode’s breakiterator is a very good way to build it. like putting lucene in the database basically - makes a lot of sense when the database is already large. places that bend over backwards to move search out of the db are usually trying to avoid having a very large db (and often end up with one anyway, getting the worst of both worlds)
- zombodb 15d agoThey also end up with all the infrastructure and processes necessary to keep the external search system in sync, resync/reindex, pkey shipping back to their source of truth in queries, application-side joins and enrichment between both sources. It’s brutal. Having everything in one place eliminates entire classes of development and especially operational problems.
- AgharaShyam 15d ago"Just use postgres" strikes again
- andrenotgiant 15d agoI think what we're seeing with every database company providing new full-text search capabilities is an example of AI coding productivity showing up in the real world. It started with paradeDB and pg_search https://www.paradedb.com/blog/introducing-search https://www.paradedb.com/blog/introducing-search Timescale has pg_textsearch https://github.com/timescale/pg_textsearch https://github.com/timescale/pg_textsearch Neon and Databricks have Lakebase Search https://docs.databricks.com/aws/en/oltp/projects/lakebase-search https://docs.databricks.com/aws/en/oltp/projects/lakebase-se... Now PlanetScale. AFAIK all of these are implementations of the BM25 algorithm. You can just tell an agent to read about BM25 and implement it in your system of choice. Cool to see. Seems like there's still a lot of juice to be squeezed out of how it's architected and integrated into each system, but you can't help but wonder if this will lead to aggressive commodification
- CodesInChaos 15d agoParadeDB's implementation builds on the Tantivy crate, which predates AI coding.
- samwillis 15d agoThere is a lot of truth to this, but it's also very much down to domain experts being able to do this to move faster. Planetscale (assuming they used a agentic development practice) will have pulled this off, to the level of performance that they have, because they have a team of very highly experienced Postgres developers. Their knowlage of Postgres internals will have given them the insights needed to steer the models to a plan that used the architecture as described in the post. That's not something a model can do on its own* World experts + LLMs = moving mountains. (* we're obviously seeing something a little different from inside the research teams in the labs. They are showing that the models, when you burn the level of tokens only they can, are able to do novel things from the models own insights.)
- cjonas 15d agoSeems like a lot of this knowledge was encoded into the blog post. I wonder if given this post and access to a planet scale instance to compare with, how close an agentic agent could get.
- alexnewman 15d agoWhat’s funny is I worked with a company with planet in the name Who could really use a full text search that was great in the Postgres
- usernametaken29 15d agoInterestingly enough SQLites FTS supports Lucene queries out of the box with great performance characteristics. IIRC only writes become pretty slow after a while. I’ve always wondered what exactly would prevent PostgreSQL from strapping that implementation into its own database. My experience with ts_query hasn’t been particularly rosy. It can be better than LIKE but only marginally so and at the cost of insane index sizes… If this extension becomes open source and we can test it out in the real world I’m sure there’s a sweet spot
- xcc3641 15d agoSQLite FTS relies on shadow B-trees under single-writer locks. Postgres index access methods must map postings directly to physical ctid tuples, surviving MVCC visibility checks and heap tuple churn.
- sick_of_slop 15d agoWhat are the advantages of Tin over using ts_vector with gin and gist indexes?
- dragonwriter 15d agoFrom the benchmarks deep in the document, TIN is much faster than built in text search (tested against GIN, which is itself much faster than GiST for text search.)
- adityapatadia 15d agoIt’s just me or there are others who keep seeing these updates and think mongodb had all of this years ago? Seriously so happy to be running our production stack on mongo.
- stickfigure 15d agoPoe's Law strikes again.
- groundzeros2015 15d agoIs this an ad? Postgres has had search for more than a decade.
- dragonwriter 15d ago> Postgres has had search for more than a decade. More than two decades (it moved to core from contrib in version 8.3 in 2008, but it was available in contrib since 7.4 in 2003.)
- adityapatadia 15d agoNot an ad, just a happy user. You can check my profile. I run another startup not affiliated with Mongo.
- stickfigure 15d agoWow, you're serious. So FYI, postgres has had FTS for decades. TIN is possibly an improvement on existing PG behavior, but proprietary to planetscale. Mongo's older search system was strictly worse than ancient standard FTS on postgres. About five years ago Mongo added more sophisticated search options. Standard PG search has been pretty stagnant, but there are PG extensions (like TIN, some proprietary some not) that add more sophistication. In the mean time, Mongo doesn't let you use SQL unless you're directly a customer of MongoDB. The native primitives for aggregation in Mongo are ghastly and feel like the era of RDBMSes before query planners were a thing. Plus transactions... are relatively new. I've used Mongo, there are things I like about Mongo, but the main benefit is horizontal scaling and the main penalty is any query more complex than get/put is hard. Whether that is worth it (especially compared to alternatives like CRDB, TiDB, or Spanner) is really very specific to you.
- aroman 15d agoI want to try Planetscale... but we're addicted to (and totally dependent on) Neon's branching model. They really got us hooked on that!
- downsplat 15d agoI suppose it all depends on the scale of your project, but I've had pretty good luck using both MySQL's and SQLite's FTS capabilities. Surprised to hear that Open Source champion Postgres didn't have up-to-snuff FTS up to now...?
- dragonwriter 15d agoIt has FTS built in and has had it for a VERY long time.
- downsplat 13d agoSo what does this one offer on top? All they're saying is "here's our FTS offering".
- groundzeros2015 15d agoPlease read the Postgres manual. It has incredible built-in search capability.
- paulddraper 15d agoIt has it. Incredible? No.
- groundzeros2015 15d agoI think it’s fantastic. You want to use this thing instead?
- rs_rs_rs_rs_rs 15d ago...yes, obviously?
- groundzeros2015 14d agoKeep me posted. I would love to hear the results.
- dragonwriter 15d agoIf you read deep into this, they claim much better performance than the built in search; they also imply that the built-in search is missing features they provide but don’t make clear which ones (I think it is just support in the same index for queries covering other conditions on other columns, because every other feature they claim seems to line up with the built in search features, which have been around for about 20 years.)
- zombodb 15d agoOver Postgres' FTS, TIN provides at least: - superior performance - superior operational overhead - no second copy of data in tsvector form - BM25 scoring support with optimized top-k output - runtime configurable scoring knobs - expression-attached score boosting - sophisticated span query support -- this is proximity search on steroids (https://github.com/planetscale/lead/tree/main/tinql/docs) - lossless term positions - index-answerable negative expressions (find all docs that don't contain a word) - full document hit highlighting - optimized exact `count(\*)` - term expansion via any of fuzzy matching, wildcards, regular expressions, and dictionary ranges - intentionally smaller user-facing SQL API surface There's a lot we didn't cover in the announcement blog. I'm sure we'll do more as time goes on. As an aside, something I personally think is cool, and I suppose you can do this with Postgres' built-in `@@` too, is that you can use TIN's full query language (linked above) against any text datum. This is a valid query: SELECT pid, query FROM pg_stat_activity WHERE query ==> 'select OR copy' in other words, you don't need an index at all to use TIN's full query language against any text field in any query.
- znpy 15d agoThis was already posted and ignored at https://news.ycombinator.com/item?id=49751888 https://news.ycombinator.com/item?id=49751888 so i’ll ask the same question: again: I don’t see any github link, is this 21st century embrace, extend, extinguish ?
- rs_rs_rs_rs_rs 15d ago>is this 21st century embrace, extend, extinguish I assume here you're talking about Amazon's modus operandi?
- znpy 14d agoot reply, congrats
- rs_rs_rs_rs_rs 14d agoIt's really not, Planetscale's CEO mentioned many times their reluctance with doing open source because of Amazon's practices.
- tannhaeuser 15d agoPostgres does have pg_fts (tsvector/tsquery/tsrank) which is a quite sophisticated full text search package integrated with functional indexing and query optimization. Why would I use something vibecoded that isn't part of core Postgres instead?
- immmmmm 15d agoPlease note possible name collision with PostGIS Triangulated Irregular Network (TIN) data type.
- dorianmariecom 15d agoit does what it says on the TIN
- Doohickey-d 15d agoThere's another aspect which none of the FTS search solutions for Postgres do well in my opinion: multi-language support. For example this one: it doesn't mention support for CJK languages (meaning tokenization for e.g. Chinese will resolve to one token per character, which will technically work and give results, but is inefficient). Also word stemming (databases -> database) is also missing as far as I can see, so the kind of queries where you'd expect related words to show up will be missing. Just doing case-folding and accent-folding is a bit of a functional but bruteforce solution. Ideally I'd want something that supports: - language aware tokenization, with ability to define the language per record. Including stemming, etc. And have useful predefined configuration for common languages (e.g. the Postgres built in one is missing many languages). - CJK support, tokenizing at word boundaries. - Optional accent- and case-folding. Most solutions just seem to assume English content, I have not found anything that does all of this yet.
- kiwicopple 15d agopgroonga is the most developed in this space https://pgroonga.github.io/ https://pgroonga.github.io/
- scottsiu 15d agoI have the exact same question. I'm also interested in when languages like CJK will get better support. https://github.com/postgres/postgres/blob/REL_19_STABLE/src/backend/po/zh_CN.po https://github.com/postgres/postgres/blob/REL_19_STABLE/src/... I saw that the 19 release includes better support for Chinese. I'm hoping to see FTS keep following up on these features going forward.
- onesandofgrain 15d agoWhy is this necessary? we have built in full-text search in postgres?
- dbbk 14d agoIt's almost as if there is a blog post that explains what's different
- onesandofgrain 14d agoslop
- dukepiki 14d agoIf you mean the blog post is slop, you are 100% wrong. PlanetScale’s blog posts are all human written. I cowrote the TIN post with TIN’s main developer, and several of my very human colleagues reviewed it.
- kevinbaiv 15d ago[dead]
- favori995749721 15d ago[flagged]
- manon_fa 13d ago[dead]
- twellborn 13d ago[flagged]