Reorder README parts

This commit is contained in:
Clément Renault 2019-12-02 17:17:16 +01:00
parent 8bc8214279
commit 8d3161a2cf
No known key found for this signature in database
GPG Key ID: 92ADA4E935E71FA4

109
README.md
View File

@ -7,8 +7,12 @@
⚡ Ultra relevant and instant full-text search API 🔍 ⚡ Ultra relevant and instant full-text search API 🔍
MeiliSearch is a powerful, fast, open-source, easy to use, and deploy search engine. The search and indexation are fully customizable and handles features like typo-tolerance, filters, and synonyms. MeiliSearch is a powerful, fast, open-source, easy to use, and deploy search engine. The search and indexation are fully customizable and handles features like typo-tolerance, filters, and synonyms.
For more [details about those features, go to our documentation](https://docs.meilisearch.com/).
## What MeiliSearch has to offer [![crates.io demo gif](misc/crates-io-demo.gif)](https://crates.meilisearch.com)
> Meili helps the Rust community find crates on [crates.meilisearch.com](https://crates.meilisearch.com)
## Features
* Search as-you-type experience (answers < 50ms) * Search as-you-type experience (answers < 50ms)
* Full-text search * Full-text search
* Typo tolerant (understands typos and spelling mistakes) * Typo tolerant (understands typos and spelling mistakes)
@ -17,50 +21,34 @@ MeiliSearch is a powerful, fast, open-source, easy to use, and deploy search eng
* Easy to install, deploy, and maintain * Easy to install, deploy, and maintain
* Whole documents returned * Whole documents returned
* Highly customizable * Highly customizable
* RESTfull API * RESTfull API
For more [details about those features, go to our documentation](https://docs.meilisearch.com/introduction/features.html).
[![crates.io demo gif](misc/crates-io-demo.gif)](https://crates.meilisearch.com)
> Meili helps the Rust community find crates on [crates.meilisearch.com](https://crates.meilisearch.com)
### In-depth features
- Provides [6 default ranking criteria](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-core/src/criterion/mod.rs#L106-L111) used to [bucket sort](https://en.wikipedia.org/wiki/Bucket_sort) documents
- Accepts [custom criteria](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-core/src/criterion/mod.rs#L20-L29) and can apply them in any custom order
- Support [ranged queries](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-core/src/query_builder.rs#L342), useful for paginating results
- Can [distinct](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-core/src/query_builder.rs#L324-L329) and [filter](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-core/src/query_builder.rs#L313-L318) returned documents based on context defined rules
- Searches for [concatenated](https://github.com/meilisearch/MeiliSearch/pull/164) and [splitted query words](https://github.com/meilisearch/MeiliSearch/pull/232) to improve the search quality.
- Can store complete documents or only [user schema specified fields](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/datasets/movies/schema.toml)
- The [default tokenizer](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-tokenizer/src/lib.rs) can index latin and kanji based languages
- Returns [the matching text areas](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-types/src/lib.rs#L49-L65), useful to highlight matched words in results
- Accepts query time search config like the [searchable attributes](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-core/src/query_builder.rs#L331-L336)
- Supports [runtime incremental indexing](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-core/src/store/mod.rs#L143-L212)
## Quick Start ## Quick Start
You can deploy your instant, relevant, and typo-tolerant MeiliSearch search engine by yourself too.
Something similar to the demo above can be achieved by following these little three steps first.
You still need to create your front-end to make it pretty, though.
### Deploy the Server ### Deploy the Server
If you have not yet installed Rust and its package manager `cargo`, go to [the installation page](https://www.rust-lang.org/tools/install).<br/>
You can deploy the server on your machine; it listens to HTTP requests on the 7700 port by default.
```bash ```bash
# If you have the Rust toolchain already installed, you can compile from the source
git clone https://github.com/meilisearch/MeiliSearch.git
cd MeiliSearch
cargo run --release cargo run --release
```
For more logs during the execution, run: # You can also use Docker
```bash docker run -it -p 7700:7700 --rm getmeili/MeiliSearch
RUST_LOG=info cargo run --release
# You can also download the binary
curl -L https://install.meilisearch.com | sh
./meilisearch
``` ```
### Create an Index and Upload Some Documents ### Create an Index and Upload Some Documents
We provide a movie dataset that you can use for testing purposes.
```bash
curl -L 'https://bit.ly/33MKvk4' -o movies.json
```
MeiliSearch can serve multiple indexes, with different kinds of documents, MeiliSearch can serve multiple indexes, with different kinds of documents,
therefore, it is required to create the index before sending documents to it. therefore, it is required to create the index before sending documents to it.
@ -74,7 +62,7 @@ We provided you a small dataset that is available in the `datasets/` directory.
```bash ```bash
curl -i -X POST 'http://127.0.0.1:7700/indexes/movies/documents' \ curl -i -X POST 'http://127.0.0.1:7700/indexes/movies/documents' \
--header 'content-type: application/json' \ --header 'content-type: application/json' \
--data @datasets/movies/movies.json --data-binary @movies.json
``` ```
### Search for Documents ### Search for Documents
@ -83,34 +71,57 @@ The search engine is now aware of our documents and can serve those via our HTTP
The [`jq` command-line tool](https://stedolan.github.io/jq/) can significantly help you read the server responses. The [`jq` command-line tool](https://stedolan.github.io/jq/) can significantly help you read the server responses.
```bash ```bash
curl 'http://127.0.0.1:7700/indexes/movies/search?q=botman' curl 'http://127.0.0.1:7700/indexes/movies/search?q=botman+robin&limit=2' | jq
``` ```
```json ```json
{ {
"hits": [ "hits": [
{ {
"id": "29751", "id": "415",
"title": "Batman Unmasked: The Psychology of the Dark Knight", "title": "Batman & Robin",
"poster": "https://image.tmdb.org/t/p/w1280/jjHu128XLARc2k4cJrblAvZe0HE.jpg", "poster": "https://image.tmdb.org/t/p/w1280/79AYCcxw3kSKbhGpx1LiqaCAbwo.jpg",
"overview": "Delve into the world of Batman and the vigilante justice tha", "overview": "Along with crime-fighting partner Robin and new recruit Batgirl...",
"release_date": "2008-07-15" "release_date": "1997-06-20",
}, },
{ {
"id": "471474", "id": "411736",
"title": "Batman: Gotham by Gaslight", "title": "Batman: Return of the Caped Crusaders",
"poster": "https://image.tmdb.org/t/p/w1280/7souLi5zqQCnpZVghaXv0Wowi0y.jpg", "poster": "https://image.tmdb.org/t/p/w1280/GW3IyMW5Xgl0cgCN8wu96IlNpD.jpg",
"overview": "ve Victorian Age Gotham City, Batman begins his war on crime", "overview": "Adam West and Burt Ward returns to their iconic roles of Batman and Robin...",
"release_date": "2018-01-12" "release_date": "2016-10-08",
} }
], ],
"offset": 0, "offset": 0,
"limit": 2, "limit": 2,
"processingTimeMs": 1, "processingTimeMs": 1,
"query": "botman" "query": "botman robin"
} }
``` ```
### Documentation
Now, that you have a running MeiliSearch, you can learn more and tune your search engine using [the documentation](https://docs.meilisearch.com).
## How it works
MeiliSearch uses [LMDB](https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database) as the internal key-value store. The key-value store allows us to handle updates and queries with small memory and CPU overheads. The whole ranking system is [data oriented](https://github.com/meilisearch/MeiliSearch/issues/82) and provides great performances.
You can [read the deep dive](deep-dive.md) if you want more information on the engine; it describes the whole process of generating updates and handling queries. Also, you can take a look at the [typos and ranking rules](typos-ranking-rules.md) if you want to know the default rules used to sort the documents.
### Technical features
- Provides [6 default ranking criteria](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-core/src/criterion/mod.rs#L106-L111) used to [bucket sort](https://en.wikipedia.org/wiki/Bucket_sort) documents
- Accepts [custom criteria](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-core/src/criterion/mod.rs#L20-L29) and can apply them in any custom order
- Support [ranged queries](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-core/src/query_builder.rs#L342), useful for paginating results
- Can [distinct](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-core/src/query_builder.rs#L324-L329) and [filter](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-core/src/query_builder.rs#L313-L318) returned documents based on context defined rules
- Searches for [concatenated](https://github.com/meilisearch/MeiliSearch/pull/164) and [splitted query words](https://github.com/meilisearch/MeiliSearch/pull/232) to improve the search quality.
- Can store complete documents or only [user schema specified fields](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/datasets/movies/schema.toml)
- The [default tokenizer](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-tokenizer/src/lib.rs) can index latin and kanji based languages
- Returns [the matching text areas](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-types/src/lib.rs#L49-L65), useful to highlight matched words in results
- Accepts query time search config like the [searchable attributes](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-core/src/query_builder.rs#L331-L336)
- Supports [runtime incremental indexing](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/meilisearch-core/src/store/mod.rs#L143-L212)
## Performances ## Performances
With a dataset composed of _100 353_ documents with _352_ attributes each and _3_ of them indexed. With a dataset composed of _100 353_ documents with _352_ attributes each and _3_ of them indexed.
@ -137,12 +148,6 @@ The resulting database was _16 GB_ and search results were between _30 ms_ and _
With Rust 1.32 the allocator has been [changed to use the system allocator](https://blog.rust-lang.org/2019/01/17/Rust-1.32.0.html#jemalloc-is-removed-by-default). With Rust 1.32 the allocator has been [changed to use the system allocator](https://blog.rust-lang.org/2019/01/17/Rust-1.32.0.html#jemalloc-is-removed-by-default).
We have seen much better performances when [using jemalloc as the global allocator](https://github.com/alexcrichton/jemallocator#documentation). We have seen much better performances when [using jemalloc as the global allocator](https://github.com/alexcrichton/jemallocator#documentation).
## How it works
MeiliSearch uses [LMDB](https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database) as the internal key-value store. The key-value store allows us to handle updates and queries with small memory and CPU overheads. The whole ranking system is [data oriented](https://github.com/meilisearch/MeiliSearch/issues/82) and provides great performances.
You can [read the deep dive](deep-dive.md) if you want more information on the engine; it describes the whole process of generating updates and handling queries. Also, you can take a look at the [typos and ranking rules](typos-ranking-rules.md) if you want to know the default rules used to sort the documents.
## Contributing ## Contributing
We will be glad if you submit issues and pull requests. You can help to grow this project and start contributing by checking [issues tagged "good-first-issue"](https://github.com/meilisearch/MeiliSearch/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22). It is a good start! We will be glad if you submit issues and pull requests. You can help to grow this project and start contributing by checking [issues tagged "good-first-issue"](https://github.com/meilisearch/MeiliSearch/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22). It is a good start!