5 ms·
I've never worked on a project that encompasses as many computer science algorithms as a search engine. There are a lot of topics you can lookup in "Information
by Xeoncross 4y ago
I've never worked on a project that encompasses as many computer science algorithms as a search engine. There are a lot of topics you can lookup in "Information Storage and Retrieval":
- 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, roaring bitmaps)
- Ranking (pagerank, tf/idf, bm25, etc...)
- NLP (stemming, POS tagging, subject identification, sentiment analysis 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...)
- Compression
- Applied linear algebra
- 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.
If you are comfortable with Go or Rust you should look at the latest projects in this space:
- https://github.com/quickwit-oss/tantivy https://github.com/quickwit-oss/tantivy
- https://github.com/valeriansaliou/sonic https://github.com/valeriansaliou/sonic
- https://github.com/mosuka/phalanx https://github.com/mosuka/phalanx
- https://github.com/meilisearch/MeiliSearch https://github.com/meilisearch/MeiliSearch
- https://github.com/blevesearch/bleve https://github.com/blevesearch/bleve
- https://github.com/thomasjungblut/go-sstables https://github.com/thomasjungblut/go-sstables
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. The problem is that search with good rankings often requires custom storage so calculations can be sharded among multiple nodes and you can do layered ranking without passing huge blobs of results between systems.
Source: I'm currently working on the third version of my search engine and I've been studying this for 10 years.
- marcooliv 4y agodo you write any content related to your journey on developing search engines? youtube channel? twitter? blog? i'm working at a startup and we are creating a search engine with neural networks, but the base of information retrieval are proving more important than just some NLP models by itself. and thank you for sharing those details!
- Xeoncross 4y agoNo, not yet. I haven't felt qualified to write about any of these individual things but I'm starting to realize not many people have the breadth of knowledge I have at this point and perhaps I should start writing for others (I have a large collection of my own notes).