<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/neon-docs-search-is-now-built-on-neon-jxvlmpaxb" -->

---
title: Neon Docs search is now built on Neon | daily.dev
description: Neon replaced its hosted docs search vendor with search built entirely on its own Lakebase Postgres primitives. The new system uses lakebase_ann for vector...
canonical: https://daily.dev/posts/neon-docs-search-is-now-built-on-neon-jxvlmpaxb
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Neon Docs search is now built on Neon | daily.dev
og:description: Neon replaced its hosted docs search vendor with search built entirely on its own Lakebase Postgres primitives. The new system uses lakebase_ann for vector...
og:url: https://daily.dev/posts/neon-docs-search-is-now-built-on-neon-jxvlmpaxb
og:image: https://api.daily.dev/og/posts/jxvlMPAXB.png
og:image:alt: Neon Docs search is now built on Neon
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Neon Docs search is now built on Neon

**[Neon](https://daily.dev/sources/neontech)** · 7 min read · 1 upvotes · 0 comments

## Summary

Neon replaced its hosted docs search vendor with search built entirely on its own Lakebase Postgres primitives. The new system uses lakebase_ann for vector search and lakebase_bm25 for BM25 keyword ranking, merged with reciprocal rank fusion and an LLM rerank. Common queries are served from a cached hybrid results table, hitting 1.9ms at p50, while uncached queries fall back to BM25 at 8.6ms at p50. Against 171 real queries, the new search finds the right page in the top five 94% of the time, up from 80% for the previous vendor.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://neon.com/blog/neon-docs-search-lakebase-search>

## Questions this post answers

### How much memory does lakebase_vector need compared to HNSW for 100 million vectors?

lakebase_vector needs under 10 GB of memory to index 100 million vectors, compared to about 300 GB for a standard HNSW index. It is a pgvector-compatible extension, so existing types, operators and queries keep working, and it scales to over a billion vectors using a new lakebase_ann index type built for separated compute and storage.

_Anyone sizing a Postgres vector search deployment can compare index memory trade-offs like these on daily.dev._

### How does BM25 ranking in Postgres differ from the built-in ts_rank full-text search?

Native Postgres full-text search ranks each document independently using ts_rank, scoring matches in isolation. BM25, the industry-standard keyword ranking algorithm, additionally weighs how rare a term is across the whole document set and how long each document is, surfacing more relevant results. The lakebase_text extension adds BM25 on top of standard tsvector columns via a lakebase_bm25 index.

_Developers weighing Postgres full-text search options can track approaches like this on daily.dev._

### How can I combine keyword and semantic search results into a single ranking in Postgres?

Reciprocal rank fusion (RRF) merges separate keyword (BM25) and semantic (vector/ANN) rankings into one combined result list. In Neon's implementation, a lakebase_bm25 index handles keyword matches and a lakebase_ann index handles semantic matches, with RRF merging both before an optional LLM rerank step for the highest-quality results.

_Developers deciding how to merge keyword and semantic search can follow implementations like this on daily.dev._

## Similar posts on daily.dev

- [Lakebase Search: vector and BM25 on Neon](https://daily.dev/posts/lakebase-search-vector-and-bm25-on-neon-lvk6nbt3l) · Neon · 4 upvotes · 0 comments
- [Announcing Lakebase Search: agent-native retrieval built into Lakebase Postgres](https://daily.dev/posts/announcing-lakebase-search-agent-native-retrieval-built-into-lakebase-postgres-uqtg9rcz2) · databricks · 1 upvotes · 0 comments
- [BM25 is only as good as your tokens](https://daily.dev/posts/bm25-is-only-as-good-as-your-tokens-zf8vmsue4) · Neon · 2 upvotes · 0 comments
- [Lakebase Search: State-of-the-art full text and vector search for Postgres](https://daily.dev/posts/lakebase-search-state-of-the-art-full-text-and-vector-search-for-postgres-gafr152pe) · databricks · 0 upvotes · 0 comments
- [Native BM25 search in AlloyDB and Cloud SQL](https://daily.dev/posts/native-bm25-search-in-alloydb-and-cloud-sql-ktxbru6mj) · Google Cloud · 0 upvotes · 0 comments

---

Tags: [#postgresql](https://daily.dev/tags/postgresql), [#rag](https://daily.dev/tags/rag), [#vector-search](https://daily.dev/tags/vector-search)

[View this post on daily.dev](https://daily.dev/posts/neon-docs-search-is-now-built-on-neon-jxvlmpaxb)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Neon Docs search is now built on Neon","url":"https://daily.dev/posts/neon-docs-search-is-now-built-on-neon-jxvlmpaxb","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/neon-docs-search-is-now-built-on-neon-jxvlmpaxb"},"datePublished":"2026-10-26T15:38:45.346Z","dateModified":"2026-10-26T15:39:14.436Z","description":"Neon replaced its hosted docs search vendor with search built entirely on its own Lakebase Postgres primitives. The new system uses lakebase_ann for vector...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/c4a14a8f0716471a4a1b187aa1c88adb?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/c4a14a8f0716471a4a1b187aa1c88adb?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Neon","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Neon","logo":"https://media.daily.dev/image/upload/s--65EDghou--/f_auto/v1724339118/logos/neontech","url":"https://daily.dev/sources/neontech"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/neon-docs-search-is-now-built-on-neon-jxvlmpaxb","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"postgresql,rag,vector-search","timeRequired":"PT7M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Neon","item":"https://daily.dev/sources/neontech"},{"@type":"ListItem","position":3,"name":"Neon Docs search is now built on Neon"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/neon-docs-search-is-now-built-on-neon-jxvlmpaxb#faq","mainEntity":[{"@type":"Question","name":"How much memory does lakebase_vector need compared to HNSW for 100 million vectors?","acceptedAnswer":{"@type":"Answer","text":"lakebase_vector needs under 10 GB of memory to index 100 million vectors, compared to about 300 GB for a standard HNSW index. It is a pgvector-compatible extension, so existing types, operators and queries keep working, and it scales to over a billion vectors using a new lakebase_ann index type built for separated compute and storage. Anyone sizing a Postgres vector search deployment can compare index memory trade-offs like these on daily.dev."}},{"@type":"Question","name":"How does BM25 ranking in Postgres differ from the built-in ts_rank full-text search?","acceptedAnswer":{"@type":"Answer","text":"Native Postgres full-text search ranks each document independently using ts_rank, scoring matches in isolation. BM25, the industry-standard keyword ranking algorithm, additionally weighs how rare a term is across the whole document set and how long each document is, surfacing more relevant results. The lakebase_text extension adds BM25 on top of standard tsvector columns via a lakebase_bm25 index. Developers weighing Postgres full-text search options can track approaches like this on daily.dev."}},{"@type":"Question","name":"How can I combine keyword and semantic search results into a single ranking in Postgres?","acceptedAnswer":{"@type":"Answer","text":"Reciprocal rank fusion (RRF) merges separate keyword (BM25) and semantic (vector/ANN) rankings into one combined result list. In Neon's implementation, a lakebase_bm25 index handles keyword matches and a lakebase_ann index handles semantic matches, with RRF merging both before an optional LLM rerank step for the highest-quality results. Developers deciding how to merge keyword and semantic search can follow implementations like this on daily.dev."}}]}
```

