I'm impressed.<p>I have a database with 15k documents, each with around 70 pages of text, HTML formatted.<p>I'm using ElasticSearch currently, with the Searchkick gem.<p>30 min playing with MeiliSearch. So far:<p>- Blazing fast to index, like 10x more performant than using ElasticSearch / Searchkick;<p>- Blazing fast to search, at least 3x faster in all my random tests so far;<p>- Literally zero config;<p>- Uses 140MB of RAM currently, while in my experience ElasticSearch would crash with anything less than 1GB, and needs at least 1.5GB to be usable in production.
I know the project doesn't claim it, but the title somewhat implies this: I honestly don't understand people claiming ElasticSearch is hard to operate, especially not at small scales. If anything, ElasticSearch for me has been one of the easiest pieces of infrastructure to operate, for me pretty much "zero-config". Let me elaborate: You can run ElasticSearch via Docker command-line, if you want a cluster you just supply IPs of the other nodes. Then you start indexing documents with simple HTTP calls. You can add or remove nodes at any time and don't have to do anything but to start another ElasticSearch instance. If you run out of space or performance just start another node. Everything needed for management, indexing, search is available through HTTP APIs, no tools needed.<p>Clustered ElasticSearch has been rock-solid for me and I've used it in anger many times. The level of maintenance needed is close to zero, both initially and long-term. Compare that with the abysmal experience of setting up a sharded MongoDB cluster for example...<p>Please enlighten me how ElasticSearch is "a lot of work to operate" (heard that one multiple times), and what you're comparing it to.
I wanted to mention Sonic [1] as another lightweight document indexing alternative written in rust, when I found MeiliSearch to provide a thoughtful comparison page [2]<p>[1] <a href="https://github.com/valeriansaliou/sonic" rel="nofollow">https://github.com/valeriansaliou/sonic</a><p>[2] <a href="https://docs.meilisearch.com/resources/comparison_to_alternatives.html#comparisons" rel="nofollow">https://docs.meilisearch.com/resources/comparison_to_alterna...</a>
Mostly "made in Rust", but from the github readme[0] "MeiliSearch uses LMDB as the internal key-value store. The key-value store allows us to handle updates and queries with small memory and CPU overheads."; so a lot of the credit goes to LMDB, and safety implied by "made in Rust" is not, in fact, guaranteed.<p>Not that I'm complaining - I love LMDB, and it's been rock solid and bug free in my experience (thanks, Howard!) - but it's low level C, not rust, and if you expect the certainty that Rust provides w.r.t to security, race conditions and leaks, be aware that you are not completely getting it.<p>But other than that: Thanks! This looks like a great project!<p>[0] <a href="https://github.com/meilisearch/MeiliSearch#how-it-works" rel="nofollow">https://github.com/meilisearch/MeiliSearch#how-it-works</a>
The goal of ElasticSearch, I always thought, was that it scales horizontally and can handle the loss of multiple nodes without availability- or data-loss. It's interesting to build a single-server replacement, and this can likely work for many use-cases, but it's definitely a different approach from ElasticSearch itself.
The real power of Elasticsearch for me is the ability to filter logs by:<p>1. exact match this nested JSON field (with support for lists of values)<p>2. negative match this nested JSON field (with support for lists of values)<p>coupled with the ability to filter by "timeframe", then pump it through to visualizations (tables/graphs) in Kibana<p>MeiliSearch would be cool if it spoke the API Kibana expects from Elasticsearch
ok I just looked through things a bit but the phrase 0 config worries me - first off I could conceivably run ElasticSearch with 0 configuration but then it needs to make decisions as to what types things are, and how things should be analyzed, and sometimes those decisions are not what I want.<p>Often ElasticSearch makes a mistake in typing because the programmer has made a mistake in data format, if you fixed that mistake your data would now not fit the format that ElasticSearch has chosen for it (actually don't know if this is still a problem because it has been years since I have ran without all my fields being mapped first) but actually don't see how it couldn't be a problem.<p>so theoretically if you didn't want to go through the trouble of defining a wrapping you could just reindex all your data fixed in such a way that ElasticSearch will choose a better type for individual fields but why would you do this?<p>And I mean what does MelliSearch do? I wonder - because looking through this code here <a href="https://github.com/meilisearch/MeiliSearch/blob/master/meilisearch-schema/src/fields_map.rs" rel="nofollow">https://github.com/meilisearch/MeiliSearch/blob/master/meili...</a> (and not being a rust guy my understanding of it is probably off) but it seems like maybe it is no configuration because it expects you to follow its semantics.
Which to be fair lots of things do, at the base level, everything has a title, description, date.<p>But if I have a domain with different or probably more advanced semantics what happens?<p>Search Engines are generally configurable because you want to add other fields and rank hits in those fields higher than other things, or maybe do a specific search that only targets those fields - like say Brands based search.<p>on preview: lots of other people with similar views it seems, I got maybe a bit ranty just because the title sets me off when it just is so wrong it even seems like lying.
Awesome, glad to see all the competition in the search space now. There are other projects like Sonic, Tantivy, Toshi and more that have more functionality if you need alternatives.<p>Here's a public list of search projects (in rust, c, go): <a href="https://gist.github.com/manigandham/58320ddb24fed654b57b4ba22aceae25" rel="nofollow">https://gist.github.com/manigandham/58320ddb24fed654b57b4ba2...</a>
Hardly an "alternative to Elastic search" if only because the later is scalable beyond a single machine.<p>This overhyped description coupled with on-by-default analytics suggests to me MeiliSearch should be dismissed regardless of potential usefulness or technical merit.
Nice. This looks promising. Very clean API. I like the focus on a narrow use case.<p>Do you have any information on security topics like using TLS, client authentication, etc?
MeiliSearch appears to be more of an alternative to Lucene than it is to Elasticsearch. Lucene is the search engine that runs on a single instance; ES is the horizontally-scalable distribution and aggregation layer atop the instances. Absent a similar aggregation layer, MeiliSearch isn't "elastic" as the comparison implies.
Looks pretty good. The single filter approach is restrictive though.<p>We're currently leaning towards Manticore Search[1], which is a fork of Sphinx Search[2].<p>[1] <a href="https://manticoresearch.com" rel="nofollow">https://manticoresearch.com</a>
[2] <a href="http://sphinxsearch.com" rel="nofollow">http://sphinxsearch.com</a>
While this might be an alternative for that one specific use case (search bar), it does not feel like a viable alternative to ES. I am sure it is great at that specific case, and don't want to knock them on that. But, I have never used ES for a simple search like they are. when I use ES, I want to store billions of records redundantly and search them by text, time, and/or location. And then create visualizations with the results.<p>When I first read the title I thought it might be a Rust based Lucene engine or something, and thought that would be pretty cool. Though no idea how that would work. On its own, this is a pretty nifty little tool, however I think the framing as an ES alternative is what feels wrong to me, and apparently others in the comments as well.
> MeiliSearch can serve multiple indexes, with different kinds of documents, therefore, it is required to create the index before sending documents to it.<p><a href="https://github.com/meilisearch/MeiliSearch#create-an-index-and-upload-some-documents" rel="nofollow">https://github.com/meilisearch/MeiliSearch#create-an-index-a...</a><p>Indexes are config. This is not really zero-config if you require API calls before it can receive data.<p>Also, there's nothing about TLS or access control. These will be required for any production deployment. At the minimum, let us specify a TLS key.pem and cert.pem file and create write-only and read-only access tokens.
If you are looking for alternatives, check out Typesense as well:<p><a href="https://github.com/typesense/typesense" rel="nofollow">https://github.com/typesense/typesense</a>
How does it compare to Sonic <a href="https://github.com/valeriansaliou/sonic" rel="nofollow">https://github.com/valeriansaliou/sonic</a>
Does anyone know if this supports bulk indexing? My team has a lot of data in S3 in parquet format. (We could change the format to something else if that helps).<p>It would be really nice to be able to point tools like MeilliSearch or ElasticSearch to a data location and have it index all the data without me writing code to send individual records to the API.
Looks promising! Are there any docs coming on a production ready setup? Reading below it looks like you're working on high availability, but even in the single machine scenario, do you have recommendations for persistence, fault tolerance etc?
We use Algolia and use the public API keys with search filters encoded so they can only search their data (I.e. account_id:123)<p>Is there anything similar here? Otherwise all the queries need to go through our servers first to ensure the filter is present.
I've never used elasticsearch and only had a brief toy project with Algolia. The demo on the github repo looks awesome.<p>Can this run on top of my postgres database?