4,443 karma · joined October 20, 2010
kishore at typesense org https://calendly.com/kishorenc/30min
Citation needed as well :) What I actually meant is that for a class of use cases like e-commerce, search is an important feature with a direct impact on revenue. For example, search in e-commerce enables product discovery. So a downtime hits your revenue directly.
This is a bummer because high availability is really important for many search uses cases. For e.g. think about e-commerce where search literally prints money.
EDIT: it seems like the open source version supports a read-only replica for failover but my overall thoughts about not crippling/compromising the clustering story in open source version still stands.
While I understand the rationale for this move, unfortunately not having HA in a non-starter.
I had a similar temptation when open-sourcing Typesense (https://github.com/typesense/typesense) and thought long and hard about keeping clustering as part of a closed source commercial edition but eventually decided against it. I understand that commercialising certain features is a necessarily evil and trade-offs must be made. However, I think there are still many avenues to do that without keeping clustering closed source.
Apart from that, I am happy to see the search space heating up with a lot more interesting options.
Disclosure: I have stakes in the open source search eco-system (https://github.com/typesense/typesense) but a genuine Redis fan.
> Is it also possible to control typo sensitivity
You can control overall number of typose with ?num_typos=1 -- there is no way to define min chars for a specific typo. The engine does make some intelligent decisions to optimize. For example, for a 2 letter query it does not use a num_typos=2 even if that is specified.
Glad to hear about the setup. Will continue to improve.
[1]: https://myrocks.io/
Would love to hear your feedback on Typesense: https://github.com/typesense/typesense
It initially started off with a question of "Why is ES so difficult to grok and manage?". Then I started researching around various data structures for efficiently storing text and numerical values and various algorithms for sorting the data in real time to surface relevant documents.
After 4 years of development, the project is pretty stable but I'm still adding features and has been getting some traction finally. I recently added a raft based replication aka clustering. I used a production ready Raft library for that, but it was still very nice to understand the nitty gritties of the Raft implementation.
I doubt I would build something more complicated ever, but who knows right :)
What began as a simple side project 4 years ago has consumed a significant part of my free time over the last couple of years.
Web assembly is certainly going to open a lot of new avenues for doing interesting things on the browser.
While my work is currently done outside my core working hours, I've been exploring if it is possible to make it self-sustainable and have been reading about a few other people who have been successful at this. I think the trick is to make it possible for people to pay you in one or more ways:
a) Don't ask for donations, but offer a support contract. It's easier for devs to get that approved.
b) Offer a hosted version at a reasonable price. Sell the convenience -- of course, this might not be feasible if your open source tool is not easy to offer as a hosted service.
c) Offer some premium features as a paid product. Companies are again happy to purchase a premium version if the pricing is not ridiculous (e.g. $500/year will be a no-brainer) and you can also throw in additional support.
d) Get a company to sponsor a feature if it is something that they badly want.
e) Charge for adding a company's logo in the Github repository as a less intrusive form of advertising.
f) Use your open source code and popularity to get a better paying job with work-life balance. Indirect monetization but hey, that's pretty legit.
g) Find a company that allows you to work on an open source project full time. Not too many companies do it but if your interests/strengths overlap with a project (e.g. Kubernetes) that you contribute to, this could be an option.
Is it perfect? No, as another comment here points out, Raft might not be as fast as some other more complicated Paxos variants but that's okay for most use cases and is much easier to reason about.
To give an example of how powerful this is, I started implementing high availability for an opensource instant search engine I've been working on (https://github.com/typesense/typesense) and was able to get a basic clustering solution working in just a few days.
Pre-raft this would have taken a few weeks or would have required an external coordinator like Zookeeper. This way, Raft has unlocked so many opportunities.
The primary benefits are simplicity, typo tolerance and ability to expose the search engine directly to the front end without having to put it behind an ELB as described in this post for Elasticsearch.
P.S: I work on this.
In the past 5 years, my journey has brought me through my wedding, the birth of my first child, losing a loved family member, a job switch and so on. Nevertheless, it has been really great seeing the project gain traction and motivate me to keep working on it through the highs and lows. Everybody differs, but I think for me the following 2 things kept me going:
a) Pick a project that you are sufficiently motived.
b) Don't set deadlines but have a plan to work on the project everyday. One some days it will be hours, on other days it will be just thinking about a problem at the back of your mind for a few minutes, but the idea is to keeping at it.
Now nearly 5 years later, I'm still not done yet but I'm amazed how much I've achieved by just showing up every single day.
https://github.com/typesense/typesense
It supports multiple filters and has HA for reads as well.
This is not entirely true. You can just use a field with a constant value (say 100) as the default sorting field and Typesense will just use the text based relevancy. Please update your comment.
The reason why Typesense does insist on one, though is that it's always a good idea to have a field that indicates popularity of a record (or a proxy to it). It makes search so much better.