mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-26 06:44:27 +01:00
Reorder README parts
This commit is contained in:
parent
8bc8214279
commit
8d3161a2cf
107
README.md
107
README.md
@ -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)
|
||||||
@ -19,48 +23,32 @@ MeiliSearch is a powerful, fast, open-source, easy to use, and deploy search eng
|
|||||||
* 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!
|
||||||
|
Loading…
Reference in New Issue
Block a user