Skip to content
Python wrapper for the MeiliSearch API
Python Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows
datasets
meilisearch
tests
.editorconfig
.gitignore
.pylintrc
LICENSE
Pipfile
Pipfile.lock
README.md
setup.py
upload.sh

README.md

MeiliSearch Python Client

PyPI version Licence test Status

The python client for MeiliSearch API.

MeiliSearch provides an ultra relevant and instant full-text search. Our solution is open-source and you can check out our repository here.

Here is the MeiliSearch documentation 📖

Table of Contents

🔧 Installation

With pip3 in command line:

pip3 install meilisearch

🏃‍♀️ Run MeiliSearch

There are many easy ways to download and run a MeiliSearch instance.

For example, if you use Docker:

$ docker run -it --rm -p 7700:7700 getmeili/meilisearch:latest --api-key=apiKey

NB: you can also download MeiliSearch from Homebrew or APT.

🚀 Getting started

Add documents

import meilisearch
client = meilisearch.Client("http://127.0.0.1:7700", "apiKey")
index = client.create_index(name='books', uid='books_uid') # If your index does not exist
index = client.get_index('books_uid') # If you already created your index

documents = [
  { "id": 123,  "title": 'Pride and Prejudice' },
  { "id": 456,  "title": 'Le Petit Prince' },
  { "id": 1,    "title": 'Alice In Wonderland' },
  { "id": 1344, "title": 'The Hobbit' },
  { "id": 4,    "title": 'Harry Potter and the Half-Blood Prince' },
  { "id": 42,   "title": 'The Hitchhiker\'s Guide to the Galaxy' }
]

index.add_documents(documents) # asynchronous

Search in index

# MeiliSearch is typo-tolerant:
index.search({
  "q": 'hary pottre'
})

Output:

{
  "hits" => [{
    "id" => 4,
    "title" => "Harry Potter and the Half-Blood Prince"
  }],
  "offset" => 0,
  "limit" => 20,
  "processingTimeMs" => 1,
  "query" => "hary pottre"
}

🎬 Examples

You can check out the API documentation.

Indexes

Create an index

# Create an index
client.create_index(name='Books')
# Create an index with a specific uid (uid must be unique)
client.create_index(name= 'Books', uid= 'books')
# Create an index with a schema
schema = {
  "id":    ["displayed", "indexed", "identifier"],
  "title": ["displayed", "indexed"]
}
client.create_index(name= 'Books', schema= schema)

List all indexes

client.get_indexes()

Get an index object

index = client.get_index(uid="books")

Documents

Fetch documents

# Get one document
index.document(123)
# Get documents by batch
index.documents({ "offset": 10 , "limit": 20 })

Add documents

index.add_documents([{ "id": 2, "title": 'Madame Bovary' }])

Response:

{
    "updateId": 1
}

This updateId allows you to track the current update.

Delete documents

# Delete one document
index.delete_document(2)
# Delete several documents
index.delete_documents([1, 42])
# Delete all documents 
index.delete_all_documents()

Update status

# Get one update
# Parameter: the updateId got after an asynchronous request (e.g. documents addition)
index.get_update(1)
# Get all updates
index.get_updates()

Search

Basic search

index.search({
  "q": "prince"
})
{
    "hits": [
        {
            "id": 456,
            "title": "Le Petit Prince"
        },
        {
            "id": 4,
            "title": "Harry Potter and the Half-Blood Prince"
        }
    ],
    "offset": 0,
    "limit": 20,
    "processingTimeMs": 13,
    "query": "prince"
}

Custom search

All the supported options are described in this documentation section.

response = index.search({
  "q": "prince",
  "limit": 1
})
{
    "hits": [
        {
            "id": 456,
            "title": "Le Petit Prince"
        }
    ],
    "offset": 0,
    "limit": 1,
    "processingTimeMs": 10,
    "query": "prince"
}

🤖 Compatibility with MeiliSearch

This package works for MeiliSearch v0.8.x.

You can’t perform that action at this time.