4,443 karma · joined October 20, 2010
kishore at typesense org https://calendly.com/kishorenc/30min
In Typesense[1], I've implemented fuzzy search based on levenshtein damerau distance and it's incredibly fast. I've found this approach to be a much better (faster + more flexible) alternative to Peter Norvig's brute-force based spell-checker that is quite a popular post [2].
[1]: https://github.com/typesense/typesense [2]: https://norvig.com/spell-correct.html
The latest RC build is `0.22.0.rcs18`.
Most people think of search and immediately think of large data sets, but the problems that plague smaller datasets are equally interesting. It's less about performance and more about relevance. For e.g. searching across multiple fields for a compound query like "taylor swift style", requires breaking the query into segments (taylor swift | style) before searching for the appropriate fields. There are also a class of problems that traditional search engines that rely on BM25 or TF-IDF for ranking cannot reliably solve (e.g. searching on small texts like titles) where you have to consider distance between matching words (which TF-IDF and BM25 miss). Lastly, there is also personalization which is almost always left as an exercise to the reader :)
There are, of course, many use cases where one does not need that speed. Eventually, like Redis we will probably have an option to use SSD storage smartly for these non-latency sensitive use cases. That's not our immediate focus though.
Over the years India has implemented several affirmative action programs (locally called "reservations") that ensures a more level playing field.
India has actually done reasonably well economically since 1995. Unless you can point to specific studies that correlate India's less-than-spectacular economic performance to the caste system directly, this is a fairly baseless statement. You only have to take a quick look at the last 10 year average GDP.
All the best with MeiliSearch!
In the case of Typesense, RocksDB is not even a top-10 contributor to the overall latency involved in serving the result. In any case, it would be good to clarify a few things:
> As we don’t use RocksDB but LMDB, we use a lot less real memory than key-value stores that uses a user-side cache system.
Typesense stores only the raw-data in RocksDB. All indexing data structures for filtering, faceting etc. are compact in-memory data structures stored outside. The only fixed memory cost from RocksDB is an in-memory table that is used to buffer writes (see the next point) before being flushed to disk. In practice, this is a trivial percentage of memory used when compared to other data structures.
> LSM-Tree key-value store like RocksDB that needs to merge/compact pages of key-values pairs before being able to return it too you
This happens in-memory and is flushed to the disk in batches. Merging of on-disk SST files happens in the background with no real impact on reads. The advantage of this approach though is that it gets you really good batched write throughput [0] (the above caveat on the difficulty of benchmarking applies).
In summary, like all systems, choosing a storage system involves many trade-offs and what really matters is what works best for your architecture.
[0]: https://typesense.org/blog/the-unreasonable-effectiveness-of...
2. We've a hosted cloud version: https://cloud.typesense.org/ -- and we also added a Sponsor button on Github because so many people have been asking us for it.
At the end of the day, being truly committed to open source is difficult once you start feeling the revenue pressure. The very openness of the license that drives the growth of the project and the community in the early days becomes an albatross around your neck. Once you have raised a lot of money, there is tremendous pressure sooner or later to own the market and to justify the insane revenue multiples at which many companies are raising. It's a delicate path.
If you set the expectations right, I think the Cloud market is large enough to accommodate several companies in most verticals. However, "growth at all costs" requires walking back on your ideals and promises.
As far as Typesense goes though, I found that the actual posting lists, document listings, and other faceting/sorting related indexing data structures is where the bigger overhead is, especially for larger datasets.
Dynamic synonyms will require more thought given the machine learning aspects involved. May require domain specific models. And I also wonder how "off-the-shelf" it will really be in practice.