All Projects → meilisearch → milli

meilisearch / milli

Licence: MIT license
Search engine library for Meilisearch ⚡️

Programming Languages

rust
11053 projects
shell
77523 projects

Projects that are alternatives of or similar to milli

FUTURE
A private, free, open-source search engine built on a P2P network
Stars: ✭ 19 (-95.61%)
Mutual labels:  search-engine, lmdb
mudrod
Mining and Utilizing Dataset Relevancy from Oceanographic Datasets to Improve Data Discovery and Access, online demo: https://mudrod.jpl.nasa.gov/#/
Stars: ✭ 15 (-96.54%)
Mutual labels:  search-engine
torchtrajectory
The World's First Search Engine for Trajectory Data
Stars: ✭ 28 (-93.53%)
Mutual labels:  search-engine
bulksearch
Lightweight and read-write optimized full text search library.
Stars: ✭ 108 (-75.06%)
Mutual labels:  search-engine
issue-collab
A GitHub Issues searcher inspired by Hacktoberfest
Stars: ✭ 26 (-94%)
Mutual labels:  search-engine
lmdbxx
C++17 wrapper for the LMDB embedded B+ tree database library
Stars: ✭ 34 (-92.15%)
Mutual labels:  lmdb
lnx
⚡ Insanely fast, 🌟 Feature-rich searching. lnx is the adaptable, typo tollerant deployment of the tantivy search engine. Standing on the shoulders of giants.
Stars: ✭ 844 (+94.92%)
Mutual labels:  search-engine
flipper
Search/Recommendation engine and metainformation server for fanfiction net
Stars: ✭ 29 (-93.3%)
Mutual labels:  search-engine
solr
Apache Solr open-source search software
Stars: ✭ 651 (+50.35%)
Mutual labels:  search-engine
SmartImage
Reverse image search tool (SauceNao, ImgOps, trace.moe, and more)
Stars: ✭ 346 (-20.09%)
Mutual labels:  search-engine
Spreads.LMDB
Low-level zero-overhead and the fastest LMDB .NET wrapper with some additional native methods useful for Spreads
Stars: ✭ 59 (-86.37%)
Mutual labels:  lmdb
sphinxql
SphinxQL query builder for Node.js. sphinxql package supports Manticore Search and Sphinx Search
Stars: ✭ 21 (-95.15%)
Mutual labels:  search-engine
fastHistory
A python tool connected to your terminal to store important commands, search them in a fast way and automatically paste them into your terminal
Stars: ✭ 24 (-94.46%)
Mutual labels:  search-engine
LegalQA
Korean LegalQA using SentenceKoBART
Stars: ✭ 77 (-82.22%)
Mutual labels:  search-engine
hldig
hl://Dig is a fork of ht://Dig, a web indexing and searching system for a small domain or intranet
Stars: ✭ 17 (-96.07%)
Mutual labels:  search-engine
patzilla
PatZilla is a modular patent information research platform and data integration toolkit with a modern user interface and access to multiple data sources.
Stars: ✭ 71 (-83.6%)
Mutual labels:  search-engine
api.rss.ui
Simple search interface around FeediRSS API.
Stars: ✭ 52 (-87.99%)
Mutual labels:  search-engine
Image2LMDB
Convert image folder to lmdb, adapted from Efficient-PyTorch
Stars: ✭ 58 (-86.61%)
Mutual labels:  lmdb
openblockchain
{START HERE} docker engine to roll your own openblockchain
Stars: ✭ 16 (-96.3%)
Mutual labels:  search-engine
mongomeili
Keep your Mongoose Schemas synced with MeiliSearch
Stars: ✭ 33 (-92.38%)
Mutual labels:  meilisearch

the milli logo

a concurrent indexer combined with fast and relevant search algorithms

Introduction

This repository contains the core engine used in Meilisearch.

It contains a library that can manage one and only one index. Meilisearch manages the multi-index itself. Milli is unable to store updates in a store: it is the job of something else above and this is why it is only able to process one update at a time.

This repository contains crates to quickly debug the engine:

  • There are benchmarks located in the benchmarks crate.
  • The cli crate is a simple command-line interface that helps run flamegraph on top of it.
  • The filter-parser crate contains the parser for the Meilisearch filter syntax.
  • The flatten-serde-json crate contains the library that flattens serde-json Value objects like Elasticsearch does.
  • The json-depth-checker crate is used to indicate if a JSON must be flattened.

How to use it?

Milli is a library that does search things, it must be embedded in a program. You can compute the documentation of it by using cargo doc --open.

Here is an example usage of the library where we insert documents into the engine and search for one of them right after.

let path = tempfile::tempdir().unwrap();
let mut options = EnvOpenOptions::new();
options.map_size(10 * 1024 * 1024); // 10 MB
let index = Index::new(options, &path).unwrap();

let mut wtxn = index.write_txn().unwrap();
let content = documents!([
    {
        "id": 2,
        "title": "Prideand Prejudice",
        "author": "Jane Austin",
        "genre": "romance",
        "price$": "3.5$",
    },
    {
        "id": 456,
        "title": "Le Petit Prince",
        "author": "Antoine de Saint-Exupéry",
        "genre": "adventure",
        "price$": "10.0$",
    },
    {
        "id": 1,
        "title": "Wonderland",
        "author": "Lewis Carroll",
        "genre": "fantasy",
        "price$": "25.99$",
    },
    {
        "id": 4,
        "title": "Harry Potter ing fantasy\0lood Prince",
        "author": "J. K. Rowling",
        "genre": "fantasy\0",
    },
]);

let config = IndexerConfig::default();
let indexing_config = IndexDocumentsConfig::default();
let mut builder =
    IndexDocuments::new(&mut wtxn, &index, &config, indexing_config.clone(), |_| ())
        .unwrap();
builder.add_documents(content).unwrap();
builder.execute().unwrap();
wtxn.commit().unwrap();


// You can search in the index now!
let mut rtxn = index.read_txn().unwrap();
let mut search = Search::new(&rtxn, &index);
search.query("horry");
search.limit(10);

let result = search.execute().unwrap();
assert_eq!(result.documents_ids.len(), 1);

Contributing

We're glad you're thinking about contributing to this repository! Feel free to pick an issue, and to ask any question you need. Some points might not be clear and we are available to help you!

Also, we recommend following the CONTRIBUTING.md to create your PR.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].