Why Writing Your Own Search Engine Is Hard (2004)

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
  • tantivy

    Tantivy is a full-text search engine library inspired by Apache Lucene and written in Rust

  • For those curious, I'm on my 3rd search engine as I keep discovering new methods of compactly and efficiently processing and querying results.

    There isn't a one-size-fits all approach, but I've never worked on a project that encompasses as many computer science algorithms as a search engine.

    - Tries (patricia, radix, etc...)

    - Trees (b-trees, b+trees, merkle trees, log-structured merge-tree, etc..)

    - Consensus (raft, paxos, etc..)

    - Block storage (disk block size optimizations, mmap files, delta storage, etc..)

    - Probabilistic filters (hyperloloog, bloom filters, etc...)

    - Binary Search (sstables, sorted inverted indexes)

    - Ranking (pagerank, tf/idf, bm25, etc...)

    - NLP (stemming, POS tagging, subject identification, etc...)

    - HTML (document parsing/lexing)

    - Images (exif extraction, removal, resizing / proxying, etc...)

    - Queues (SQS, NATS, Apollo, etc...)

    - Clustering (k-means, density, hierarchical, gaussian distributions, etc...)

    - Rate limiting (leaky bucket, windowed, etc...)

    - text processing (unicode-normalization, slugify, sanitation, lossless and lossy hashing like metaphone and document fingerprinting)

    - etc...

    I'm sure there is plenty more I've missed. There are lots of generic structures involved like hashes, linked-lists, skip-lists, heaps and priority queues and this is just to get 2000's level basic tech.

    - https://github.com/quickwit-oss/tantivy

    - https://github.com/valeriansaliou/sonic

    - https://github.com/mosuka/phalanx

    - https://github.com/meilisearch/MeiliSearch

    - https://github.com/blevesearch/bleve

    A lot of people new to this space mistakenly think you can just throw elastic search or postgres fulltext search in front of terabytes of records and have something decent. That might work for something small like a curated collection of a few hundred sites.

  • sonic

    🦔 Fast, lightweight & schema-less search backend. An alternative to Elasticsearch that runs on a few MBs of RAM.

  • For those curious, I'm on my 3rd search engine as I keep discovering new methods of compactly and efficiently processing and querying results.

    There isn't a one-size-fits all approach, but I've never worked on a project that encompasses as many computer science algorithms as a search engine.

    - Tries (patricia, radix, etc...)

    - Trees (b-trees, b+trees, merkle trees, log-structured merge-tree, etc..)

    - Consensus (raft, paxos, etc..)

    - Block storage (disk block size optimizations, mmap files, delta storage, etc..)

    - Probabilistic filters (hyperloloog, bloom filters, etc...)

    - Binary Search (sstables, sorted inverted indexes)

    - Ranking (pagerank, tf/idf, bm25, etc...)

    - NLP (stemming, POS tagging, subject identification, etc...)

    - HTML (document parsing/lexing)

    - Images (exif extraction, removal, resizing / proxying, etc...)

    - Queues (SQS, NATS, Apollo, etc...)

    - Clustering (k-means, density, hierarchical, gaussian distributions, etc...)

    - Rate limiting (leaky bucket, windowed, etc...)

    - text processing (unicode-normalization, slugify, sanitation, lossless and lossy hashing like metaphone and document fingerprinting)

    - etc...

    I'm sure there is plenty more I've missed. There are lots of generic structures involved like hashes, linked-lists, skip-lists, heaps and priority queues and this is just to get 2000's level basic tech.

    - https://github.com/quickwit-oss/tantivy

    - https://github.com/valeriansaliou/sonic

    - https://github.com/mosuka/phalanx

    - https://github.com/meilisearch/MeiliSearch

    - https://github.com/blevesearch/bleve

    A lot of people new to this space mistakenly think you can just throw elastic search or postgres fulltext search in front of terabytes of records and have something decent. That might work for something small like a curated collection of a few hundred sites.

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • phalanx

    Phalanx is a cloud-native distributed search engine that provides endpoints through gRPC and traditional RESTful API.

  • For those curious, I'm on my 3rd search engine as I keep discovering new methods of compactly and efficiently processing and querying results.

    There isn't a one-size-fits all approach, but I've never worked on a project that encompasses as many computer science algorithms as a search engine.

    - Tries (patricia, radix, etc...)

    - Trees (b-trees, b+trees, merkle trees, log-structured merge-tree, etc..)

    - Consensus (raft, paxos, etc..)

    - Block storage (disk block size optimizations, mmap files, delta storage, etc..)

    - Probabilistic filters (hyperloloog, bloom filters, etc...)

    - Binary Search (sstables, sorted inverted indexes)

    - Ranking (pagerank, tf/idf, bm25, etc...)

    - NLP (stemming, POS tagging, subject identification, etc...)

    - HTML (document parsing/lexing)

    - Images (exif extraction, removal, resizing / proxying, etc...)

    - Queues (SQS, NATS, Apollo, etc...)

    - Clustering (k-means, density, hierarchical, gaussian distributions, etc...)

    - Rate limiting (leaky bucket, windowed, etc...)

    - text processing (unicode-normalization, slugify, sanitation, lossless and lossy hashing like metaphone and document fingerprinting)

    - etc...

    I'm sure there is plenty more I've missed. There are lots of generic structures involved like hashes, linked-lists, skip-lists, heaps and priority queues and this is just to get 2000's level basic tech.

    - https://github.com/quickwit-oss/tantivy

    - https://github.com/valeriansaliou/sonic

    - https://github.com/mosuka/phalanx

    - https://github.com/meilisearch/MeiliSearch

    - https://github.com/blevesearch/bleve

    A lot of people new to this space mistakenly think you can just throw elastic search or postgres fulltext search in front of terabytes of records and have something decent. That might work for something small like a curated collection of a few hundred sites.

  • MeiliSearch

    A lightning-fast search API that fits effortlessly into your apps, websites, and workflow

  • For those curious, I'm on my 3rd search engine as I keep discovering new methods of compactly and efficiently processing and querying results.

    There isn't a one-size-fits all approach, but I've never worked on a project that encompasses as many computer science algorithms as a search engine.

    - Tries (patricia, radix, etc...)

    - Trees (b-trees, b+trees, merkle trees, log-structured merge-tree, etc..)

    - Consensus (raft, paxos, etc..)

    - Block storage (disk block size optimizations, mmap files, delta storage, etc..)

    - Probabilistic filters (hyperloloog, bloom filters, etc...)

    - Binary Search (sstables, sorted inverted indexes)

    - Ranking (pagerank, tf/idf, bm25, etc...)

    - NLP (stemming, POS tagging, subject identification, etc...)

    - HTML (document parsing/lexing)

    - Images (exif extraction, removal, resizing / proxying, etc...)

    - Queues (SQS, NATS, Apollo, etc...)

    - Clustering (k-means, density, hierarchical, gaussian distributions, etc...)

    - Rate limiting (leaky bucket, windowed, etc...)

    - text processing (unicode-normalization, slugify, sanitation, lossless and lossy hashing like metaphone and document fingerprinting)

    - etc...

    I'm sure there is plenty more I've missed. There are lots of generic structures involved like hashes, linked-lists, skip-lists, heaps and priority queues and this is just to get 2000's level basic tech.

    - https://github.com/quickwit-oss/tantivy

    - https://github.com/valeriansaliou/sonic

    - https://github.com/mosuka/phalanx

    - https://github.com/meilisearch/MeiliSearch

    - https://github.com/blevesearch/bleve

    A lot of people new to this space mistakenly think you can just throw elastic search or postgres fulltext search in front of terabytes of records and have something decent. That might work for something small like a curated collection of a few hundred sites.

  • bleve

    A modern text/numeric/geo-spatial/vector indexing library for go

  • For those curious, I'm on my 3rd search engine as I keep discovering new methods of compactly and efficiently processing and querying results.

    There isn't a one-size-fits all approach, but I've never worked on a project that encompasses as many computer science algorithms as a search engine.

    - Tries (patricia, radix, etc...)

    - Trees (b-trees, b+trees, merkle trees, log-structured merge-tree, etc..)

    - Consensus (raft, paxos, etc..)

    - Block storage (disk block size optimizations, mmap files, delta storage, etc..)

    - Probabilistic filters (hyperloloog, bloom filters, etc...)

    - Binary Search (sstables, sorted inverted indexes)

    - Ranking (pagerank, tf/idf, bm25, etc...)

    - NLP (stemming, POS tagging, subject identification, etc...)

    - HTML (document parsing/lexing)

    - Images (exif extraction, removal, resizing / proxying, etc...)

    - Queues (SQS, NATS, Apollo, etc...)

    - Clustering (k-means, density, hierarchical, gaussian distributions, etc...)

    - Rate limiting (leaky bucket, windowed, etc...)

    - text processing (unicode-normalization, slugify, sanitation, lossless and lossy hashing like metaphone and document fingerprinting)

    - etc...

    I'm sure there is plenty more I've missed. There are lots of generic structures involved like hashes, linked-lists, skip-lists, heaps and priority queues and this is just to get 2000's level basic tech.

    - https://github.com/quickwit-oss/tantivy

    - https://github.com/valeriansaliou/sonic

    - https://github.com/mosuka/phalanx

    - https://github.com/meilisearch/MeiliSearch

    - https://github.com/blevesearch/bleve

    A lot of people new to this space mistakenly think you can just throw elastic search or postgres fulltext search in front of terabytes of records and have something decent. That might work for something small like a curated collection of a few hundred sites.

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts