HN user

jabo

3,783 karma

mail At jbos d0T co

Posts217
Comments436
View on HN
twitter.com 1mo ago

Cursor (IDE) tried launching on HN 8 times unsuccessfully

jabo
14pts6
academic.oup.com 2mo ago

Blocking mobile internet on smartphones improves attention and mental health

jabo
5pts0
twitter.com 1y ago

Are you VC-funded? No, we're profitable

jabo
98pts39
typesense.org 2y ago

Burning the SSO Boogeyman

jabo
1pts0
www.uploadvr.com 2y ago

The Carnegie Mellon Oculus Booth Incident of 2014

jabo
2pts0
twitter.com 2y ago

Black box from Alaska Airlines flight erased

jabo
6pts4
twitter.com 3y ago

Vowel.com Is Shutting Down

jabo
19pts5
tech.ebayinc.com 3y ago

eBay’s Fast Billion-Scale Vector Similarity Engine

jabo
66pts24
www.fdic.gov 3y ago

Tell HN: Next steps for SVB customers from FDIC

jabo
2pts2
findxkcd.com 3y ago

Show HN: Browse Xkcd by Topic and Character

jabo
1pts0
changelog.com 3y ago

Typesense – turning a nights-weekends project into a company over 7 yrs

jabo
2pts0
typesense.org 3y ago

Thank HN: We made an appearance on the Nasdaq billboard

jabo
1pts3
venturebeat.com 4y ago

Once frenemies, Elastic and AWS are now besties

jabo
4pts1
www.sciencenews.org 4y ago

New thermal maps of Neptune reveal surprising temperature swings

jabo
1pts0
stackoverflow.blog 4y ago

Stackoverflow Filters

jabo
41pts12
xkcd-search.typesense.org 4y ago

Show HN: Search xkcd Comics by Topic

jabo
7pts6
www.youtube.com 4y ago

Airlines Quietly Became Banks through their frequent flyer programs [video]

jabo
5pts0
www.cloudquery.io 4y ago

Query AWS API with SQL

jabo
3pts0
blog.airplane.dev 4y ago

How to build a technical moat for your product

jabo
3pts1
cseducators.stackexchange.com 4y ago

Should I teach that 1 kB = 1024 bytes or 1000 bytes?

jabo
3pts1
developer.chrome.com 4y ago

Record, replay and measure user flows in Chrome DevTools

jabo
1pts0
github.com 4y ago

Open source MongoDB drop-in replacement, built on top of Postgres

jabo
17pts2
blog.danslimmon.com 4y ago

Do-nothing scripting: the key to gradual automation (2019)

jabo
804pts230
time.com 4y ago

Facebook will not fix itself

jabo
13pts10
techcommunity.microsoft.com 4y ago

EdgelessDB: A Database Designed for Confidential Computing

jabo
64pts20
github.com 4y ago

Replace Chalk with Nanocolors in Babel

jabo
1pts0
twitter.com 4y ago

Bolt switches to 4-day work week

jabo
2pts0
lwn.net 4y ago

OpenSSL 3.0 released; relicensed to Apache-2.0

jabo
161pts67
github.com 4y ago

Htmlq: like jq, but for html

jabo
961pts166
github.com 4y ago

Miller CLI – Like Awk, sed, cut, join, and sort for CSV, TSV and JSON

jabo
273pts66

The day I discovered that marquee tags have a direction attribute, using which you can make the text go up/down left/right and use multiple of these tags, is still etched in my memory.

We generally tend to engage in in-depth conversations with our users.

But in this case, when you opened the GitHub issue, we noticed that you’re part of the Meilisearch team, so we didn’t want to spend too much time explaining something in-depth to someone who was just doing competitive research, when we could have instead spent that time helping other Typesense users. Which is why the response to you might have seemed brief.

For what it’s worth, the approach used in Typesense is called Reciprocal Rank Fusion (RRF) and it’s a well researched topic that has a bunch of academic papers published on it. So it’s best to read those papers to understand the tradeoffs involved.

We’ve interacted before on Twitter and GitHub, and I want to address your point about Raft in Typesense since you mention it explicitly:

I can confidently say that Raft in Typesense is NOT broken.

We run thousands of clusters on Typesense Cloud serving close to 2 Billion searches per month, reliably.

We have airlines using us, a few national retailers with 100s of physical stores in their POS systems, logistic companies for scheduling, food delivery apps, large entertainment sites, etc - collectively these are use cases where a downtime of even an hour could cause millions of dollars in loss. And we power these reliably on Typesense Cloud, using Raft.

For an n-node cluster, the Raft protocol only guarantees auto-recovery for a failure of up to (n-1)/2 nodes. Beyond that, manual intervention is needed. This is by design to prevent a split brain situation. This not a Typesense thing, but a Raft protocol thing.

Here's an example of semantic search:

Let's say your dataset has the words "Oceans are blue" in it.

With keyword search, if someone searches for "Ocean", they'll see that record, since it's a close match. But if they search for "sea" then that record won't be returned.

This is where semantic search comes in. It can automatically deduce semantic / conceptual relationships between words and return a record with "Ocean" even if the search term is "sea", because the two words are conceptually related.

The way semantic search works under the hood is using these things called embeddings, which are just a big array of floating point numbers for each record. It's an alternate way to represent words, in an N-dimensional space created by a machine learning model. Here's more information about embeddings: https://typesense.org/docs/0.25.0/api/vector-search.html#wha...

With the latest release, you essentially don't have to worry about embeddings (except may be picking one of the model names to use and experiment) and Typesense will do the semantic search for you by generating embeddings automatically.

I work on Typesense [1] - historically considered an open source alternative to Algolia.

We then launched vector search in Jan 2023, and just last week we launched the ability to generate embeddings from within Typesense.

You'd just need to send JSON data, and Typesense can generate embeddings for your data using OpenAI, PaLM API, or built-in models like S-BERT, E-5, etc (running on a GPU if you prefer) [2]

You can then do a hybrid (keyword + semantic) search by just sending the search keywords to Typesense, and Typesense will automatically generate embeddings for you internally and return a ranked list of keyword results weaved with semantic results (using Rank Fusion).

You can also combine filtering, faceting, typo tolerance, etc - the things Typesense already had - with semantic search.

For context, we serve over 1.3B searches per month on Typesense Cloud [3]

[1] https://github.com/typesense/typesense

[2] https://typesense.org/docs/0.25.0/api/vector-search.html

[3] https://cloud.typesense.org

We've been using Struct's Slack bot in Typesense's Slack community here (if you want to see a demo of how it looks):

https://threads.typesense.org/kb

I love that the discussions we're having (in public channels) are now automatically indexed and made searchable publicly to any users who are looking for information on Google, etc, even if they're not a part of our Slack community.

I previously used to be worried about all this time and effort we're putting in to a walled garden of information that Slack was becoming, not to mention their untenable pricing for communities.

I now find myself spending more time writing more detailed answers in Slack, because I know it's going to be available publicly for future searchers.

I get this question frequently - why not use FAISS or ANNOY directly, instead of a vector database, so glad to see this aspect covered in this article.

Plug: If you're ever looking for an open source alternative to Pinecone, we recently added vector search to Typesense: https://typesense.org/docs/0.24.1/api/vector-search.html

The key thing is that it's in-memory and allows you to combine attribute-based filtering, together with HNSW-based nearest-neighbor search.

We're also working on a way to automatically generate embeddings from within Typesense using any ML models of your choice.

So Algolia + Pinecone + Open Source + Self-Hostable with a cloud hosted option = Typesense

Plug: If you're ever looking for an open source alternative to Pinecone, we recently added vector search to Typesense: https://typesense.org/docs/0.24.1/api/vector-search.html

The key thing is that it's in-memory and allows you to combine attribute-based filtering, together with nearest-neighbor search.

We're also working on a way to automatically generate embeddings from within Typesense using any ML models of your choice.

So Algolia + Pinecone + Open Source + Self-Hostable with a cloud hosted option = Typesense

If I'm reading this correctly, it looks like search requests are now charged separate from the number of documents.

So if I have 5M records and 5M searches per month, in the old pricing scheme I would have paid $5K per month.

In the new pricing plan, I would pay $0.40 per 1K records and then $0.50 per 1K searches. So that's $2K for record storage and $2.5K for search requests for a total of $4.5K.

This blog post [1] claims they've slashed prices by 50%, which may be true at the unit level, but then it sounds like they've separated out charges for searches and records, so you still end up paying close to what you used to pay previously...

Am I misreading something?

[Disclaimer: I work on Typesense, an open source alternative to Algolia with a SaaS version, so I'm looking to understand this better myself.]

[1] https://www.algolia.com/about/news/algolia-introduces-new-de...

I really appreciate that you took the time to write this detailed comment! Thank you!

but for me one example of production looks like a raspberry pi in a school house in rural africa (internet in a box project)

This is an interesting perspective, one that I hadn't considered before. You're saying that software can be run in a variety of different environments and that the definition of what a "production" environment looks like is context-dependent.

My definition of "production" in the context of server software is that you typically run this software on a server or set of servers in some datacenter (think Redis, Postgres, MySQL, MongoDB, etc). In this context, I've always defined "production-ready" as:

1. Can it withstand infrastructure failures?

2. Is the API stable?

So when I say Meilisearch is not "production-ready", it's in this specific context - it can only be run on a single node, and it cannot handle infrastructure failures natively. So it could become single point of failure.

This here is another spot where you seem biased. Remove the "despite v1.x versioning", it comes off as petty.

Historically I've seen server software has fault tolerance built-in when they reach v1.0, and it's a common assumption that I've seen engineers make. So I wanted to call attention to it... The phrasing of it comes across as petty, now that you mention it. I'll remove that.

I get what you're saying about "production ready" but there must be another way to word it?

I think "fault tolerance" is a better word to describe what I had in mind. I'll update this.

I don't think either of you support https.

Typesense does support https natively.

Do you really not recommend the use of a reverse proxy? ... I guess you're assuming it's running on a stand alone computer with a public facing IP... ? Are you not providing a frontend/dashboard?

Yes to all your questions, except that Typesense does support HTTPS natively.

You've made this sound like a draw back, if you had of put "None. Self-contained binary" in front of it like you did for yourself that would be fine but for this you mention a feature that you have while ignoring what looks to me like the same feature in your competitor.

I was actually going to add "None. Self-contained binary" for Meilisearch. But then their docs explicitly recommend using a reverse proxy in front: https://docs.meilisearch.com/learn/cookbooks/running_product...

With Typesense, we use h2o as the http library, which for eg Fastly exposes directly to internet-bound traffic and it's specifically built for handling high-volume traffic. This is why we feel comfortable recommending not putting a reverse-proxy in front of Typesense.

Language support... This is also a bit confusing, and I can't help but think it's probably not completely honest. What makes meilisearch different so that it doesn't support "all languages", but elasticsearch does? Meilisearch certainly claims to support all languages where words are seperated by spaces, do you support languages that don't have words separated by spaces?

Yes, we support all languages that are space-separated. We also added support for CJK languages recently (which are not space-separated). I picked the phrasing you see under the Meilisearch column, from their docs: https://docs.meilisearch.com/learn/what_is_meilisearch/langu... (it used to read slightly different previously).

Meilisearch is multilingual, featuring optimized support for: Any language that uses whitespace to separate words Chinese Japanese Hebrew Thai We aim to provide global language support, and your feedback helps us move closer to that goal.

This user claims that meilisearch has better multi-language support: https://news.ycombinator.com/item?id=34708802

We didn't support CJK languages in a GA release, until 2 weeks ago. So they are most likely talking about an earlier version of Typesense.

Part of why I find the whole typesense comparison page disingenuous is that you're making the ability to swap to disk sound like an anti-feature.

Didn’t intend it that way. In fact, we recommend that users configure swap space even in Typesense as a safety mechanism.

May I know which part of the comparison table makes it sound like that?

The one under Index location says: “Disk with Memory Mapped files” for Meilisearch, which I updated based on the Meilisearch team’s feedback…

Edit: To your first point, I meant to link to the parent comment: https://news.ycombinator.com/item?id=34708352

I’ve also seen similar RAM recommendations from the Meilisearch team on GitHub to other users reporting similar performance issues.

Hmmm, I remember those emails and I did reply to gmourier, and made almost all of the changes he pointed out, to our comparison page. Here's [1] the exact commit with the changes I made.

The only one change I didn't make is the one about Meilisearch not being constrained by RAM, because of reports like this [2] I've seen in the past and because I saw this in your docs:

https://docs.meilisearch.com/learn/advanced/storage.html#mem...

For the best performance, it is recommended to provide the same amount of RAM as the size the database takes on disk, so all the data structures can fit in memory.

[1] https://github.com/typesense/typesense-website/commit/0103ff...

[2] https://news.ycombinator.com/item?id=34708658

Let me know which other ones need updating.

I’ve come to see it this way:

If a set of users are using a product only because it is built in X, that user base is most likely the early adopter audience for X and it dangerously masks whether that product has product-market fit or not.

So if a product markets itself as built in X, it is appealing to early adopters of X.

The long-tail of users on the other hand, care more about what painful problem the product is solving for them.

Now, some of the features of X might provide benefits to end users, but the long tail of users care more about those benefits they get rather than the fact that X provides those benefits, and that the product uses X.

Disclaimer: I work on Typesense [1] (an open source alternative to Algolia + Pinecone) and we recently added Vector Search as a feature to Typesense [2].

Postgres can do a lot of things, but for large enough datasets and/or when you want to add filtering into the mix along with vector search, then it becomes slow. And at that point you want to use a dedicated vector search database.

It's similar to how Postgres can also do full text search, but for large datasets and/or you want to add typo tolerance, faceting, grouping, filtering, synonyms, etc - the usual features you'd need when implementing a search feature - then it becomes slow to do this in pg and you'd then use a dedicated search engine.

In Typesense, we've now combined Vector Search along with filtering based on attributes in your documents, so you get the best of both worlds [2], and we made it fast with an in-memory index.

[1] https://typesense.org/

[2] https://typesense.org/docs/0.24.0/api/vector-search.html