mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-26 06:44:27 +01:00
Rephrase the readme
This commit is contained in:
parent
ba8a410d4c
commit
592a438ae8
62
README.md
62
README.md
@ -7,8 +7,8 @@
|
|||||||
|
|
||||||
⚡ 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. Both searching and indexing are highly customizable. Features such as typo-tolerance, filters, and synonyms are provided out-of-the-box.
|
||||||
For more [details about those features, go to our documentation](https://docs.meilisearch.com/).
|
For more information about features go to [our documentation](https://docs.meilisearch.com/).
|
||||||
|
|
||||||
[![crates.io demo gif](misc/crates-io-demo.gif)](https://crates.meilisearch.com)
|
[![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)
|
> Meili helps the Rust community find crates on [crates.meilisearch.com](https://crates.meilisearch.com)
|
||||||
@ -20,11 +20,11 @@ For more [details about those features, go to our documentation](https://docs.me
|
|||||||
* Supports Kanji
|
* Supports Kanji
|
||||||
* Supports Synonym
|
* Supports Synonym
|
||||||
* Easy to install, deploy, and maintain
|
* Easy to install, deploy, and maintain
|
||||||
* Whole documents returned
|
* Whole documents are returned
|
||||||
* Highly customizable
|
* Highly customizable
|
||||||
* RESTfull API
|
* RESTful API
|
||||||
|
|
||||||
## Quick Start
|
## Get started
|
||||||
|
|
||||||
### Deploy the Server
|
### Deploy the Server
|
||||||
|
|
||||||
@ -34,14 +34,14 @@ For more [details about those features, go to our documentation](https://docs.me
|
|||||||
docker run -it -p 7700:7700 --rm getmeili/meilisearch
|
docker run -it -p 7700:7700 --rm getmeili/meilisearch
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Installation using Homebrew
|
#### Installing with Homebrew
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
brew update && brew install meilisearch
|
brew update && brew install meilisearch
|
||||||
meilisearch
|
meilisearch
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Installation using APT
|
#### Installing with APT
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo "deb [trusted=yes] https://apt.fury.io/meilisearch/ /" > /etc/apt/sources.list.d/fury.list
|
echo "deb [trusted=yes] https://apt.fury.io/meilisearch/ /" > /etc/apt/sources.list.d/fury.list
|
||||||
@ -62,7 +62,7 @@ curl -L https://install.meilisearch.com | sh
|
|||||||
|
|
||||||
#### Compile and run it from sources
|
#### Compile and run it from sources
|
||||||
|
|
||||||
If you have the Rust toolchain already installed, you can compile from the source
|
If you have the Rust toolchain already installed on your local system, clone the repository and change it to your working directory. In the cloned repository, compile MeiliSearch.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/meilisearch/MeiliSearch.git
|
git clone https://github.com/meilisearch/MeiliSearch.git
|
||||||
@ -72,21 +72,20 @@ cargo run --release
|
|||||||
|
|
||||||
### 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.
|
Let's create an index! If you need a sample dataset, use [this movie database](https://www.notion.so/meilisearch/A-movies-dataset-to-test-Meili-1cbf7c9cfa4247249c40edfa22d7ca87#b5ae399b81834705ba5420ac70358a65). You can also find it in the `datasets/` directory.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -L 'https://bit.ly/2PAcw9l' -o movies.json
|
curl -L 'https://bit.ly/2PAcw9l' -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.
|
It is required to create an index before sending documents to it.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -i -X POST 'http://127.0.0.1:7700/indexes' --data '{ "name": "Movies", "uid": "movies" }'
|
curl -i -X POST 'http://127.0.0.1:7700/indexes' --data '{ "name": "Movies", "uid": "movies" }'
|
||||||
```
|
```
|
||||||
|
|
||||||
Now that the server knows about our brand new index, we can send it data.
|
Now that the server knows about your brand new index, you're ready to send it some data.
|
||||||
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' \
|
||||||
@ -98,8 +97,8 @@ curl -i -X POST 'http://127.0.0.1:7700/indexes/movies/documents' \
|
|||||||
|
|
||||||
#### In command line
|
#### In command line
|
||||||
|
|
||||||
The search engine is now aware of our documents and can serve those via our HTTP server again.
|
The search engine is now aware of your documents and can serve those via a HTTP server.
|
||||||
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 greatly help you read the server responses.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl 'http://127.0.0.1:7700/indexes/movies/search?q=botman+robin&limit=2' | jq
|
curl 'http://127.0.0.1:7700/indexes/movies/search?q=botman+robin&limit=2' | jq
|
||||||
@ -130,27 +129,27 @@ curl 'http://127.0.0.1:7700/indexes/movies/search?q=botman+robin&limit=2' | jq
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### With the Web Interface
|
#### Use the Web Interface
|
||||||
|
|
||||||
MeiliSearch provides a simple web interface containing a search bar in order to quickly test the instant search experience with a given set of documents.
|
We also deliver an out-of-the-box web interface in which you can test MeiliSearch interactively.
|
||||||
|
|
||||||
This web interface is available in your browser at the root of the server. The default URL is [http://127.0.0.1:7700](http://127.0.0.1:7700).
|
You can access the web interface in your web browser at the root of the server. The default URL is [http://127.0.0.1:7700](http://127.0.0.1:7700). All you need to do is open your web browser and enter MeiliSearch’s address to visit it. This will lead you to a web page with a search bar that allows you to search in a given set of documents.
|
||||||
|
|
||||||
### Documentation
|
### Documentation
|
||||||
|
|
||||||
Now, that you have a running MeiliSearch, you can learn more and tune your search engine using [the documentation](https://docs.meilisearch.com).
|
Now that your MeiliSearch server is up and running, you can learn more about how to tune your search engine in [the documentation](https://docs.meilisearch.com).
|
||||||
|
|
||||||
## How it works
|
## 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.
|
MeiliSearch uses [LMDB](https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database) as the internal key-value store. The key-value store allows 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 ensures 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.
|
You can read [this document](deep-dive.md) if you want to dive deeper into the engine. The whole process of generating updates and handling queries is described in it. Besides, to learn the default rules used for sorting documents, you can take a look at this [typos and ranking rules explanation](typos-ranking-rules.md).
|
||||||
|
|
||||||
### Technical features
|
### 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
|
- 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
|
- 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
|
- Supports [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
|
- 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.
|
- 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)
|
- Can store complete documents or only [user schema specified fields](https://github.com/meilisearch/MeiliSearch/blob/3ea5aa18a209b6973b921542d46a79e1c753c163/datasets/movies/schema.toml)
|
||||||
@ -161,8 +160,7 @@ You can [read the deep dive](deep-dive.md) if you want more information on the e
|
|||||||
|
|
||||||
## Performances
|
## Performances
|
||||||
|
|
||||||
With a dataset composed of _100 353_ documents with _352_ attributes each and _3_ of them indexed.
|
When processing a dataset composed of _100 353_ documents with _352_ attributes each and _3_ of them indexed, which means more than _300 000_ fields indexed for _35 million_ stored, MeiliSearch is able to carry out more than _2.8k req/sec_ with an average response time of _9 ms_ on an Intel i7-7700 (8) @ 4.2GHz.
|
||||||
So more than _300 000_ fields indexed for _35 million_ stored we can handle more than _2.8k req/sec_ with an average response time of _9 ms_ on an Intel i7-7700 (8) @ 4.2GHz.
|
|
||||||
|
|
||||||
Requests are made using [wrk](https://github.com/wg/wrk) and scripted to simulate real users' queries.
|
Requests are made using [wrk](https://github.com/wg/wrk) and scripted to simulate real users' queries.
|
||||||
|
|
||||||
@ -177,20 +175,20 @@ Requests/sec: 2806.46
|
|||||||
Transfer/sec: 759.17KB
|
Transfer/sec: 759.17KB
|
||||||
```
|
```
|
||||||
|
|
||||||
We also indexed a dataset containing something like _12 millions_ cities names in _24 minutes_ on a machine with _8 cores_, _64 GB of RAM_, and a _300 GB NMVe_ SSD.<br/>
|
We also indexed a dataset containing about _12 millions_ cities names in _24 minutes_ on a _8 cores_, _64 GB of RAM_, and a _300 GB NMVe_ SSD machine.<br/>
|
||||||
The resulting database was _16 GB_ and search results were between _30 ms_ and _4 seconds_ for short prefix queries.
|
The size of the resulting database reached _16 GB_ and search results were presented between _30 ms_ and _4 seconds_ for short prefix queries.
|
||||||
|
|
||||||
### Notes
|
### Notes
|
||||||
|
|
||||||
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).
|
In 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 observed significant performance improvements when [using jemalloc as the global allocator](https://github.com/alexcrichton/jemallocator#documentation).
|
||||||
|
|
||||||
## 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!
|
Hey! We're glad you're thinking about contributing to MeiliSearch! If you think something is missing or could be improved, please open issues and pull requests. If you'd like to help this project grow, we'd love to have you! To start contributing, checking [issues tagged as "good-first-issue"](https://github.com/meilisearch/MeiliSearch/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) is a good start!
|
||||||
|
|
||||||
### Analytic Events
|
### Analytic Events
|
||||||
|
|
||||||
We send events to our Amplitude instance to be aware of the number of people who use MeiliSearch.<br/>
|
Once a day, events are being sent to our Amplitude instance so we can know how many people are using MeiliSearch.<br/>
|
||||||
We only send the platform on which the server runs once by day. No other information is sent.<br/>
|
Only information concerning the platform on which the server runs is concerned. No other information is being sent.<br/>
|
||||||
If you do not want us to send events, you can disable these analytics by using the `MEILI_NO_ANALYTICS` env variable.
|
If this doesn't suit you, you can disable these analytics by using the `MEILI_NO_ANALYTICS` env variable.
|
||||||
|
Loading…
Reference in New Issue
Block a user