Skip to main content

Custom Django integration for MeiliSearch.

Project description

Django-Meili

A package to integrate Meilisearch with Django in a seamless way. This pacakge is tested on Meilisearch v1.24 - v1.31.

Install

pip install django_meili

Usage

Settings

Update your settings.py file to include the following:

INSTALLED_APPS = [
    # ...,  <--- Any 3rd Party code
    "django_meili",
    # ...,  <--- All your modules
]

# ....

MEILISEARCH = {}

You must define the django_meili application before any of your code that uses the application.

(NEW) Using djp

If you are using DJP as your django plugin manager, then you can simply install the application as normal. If you define your own custom settings, it will take priority over the current settings.

Example in Models

Update a model to include the following:

from django_meili.models import IndexMixin
from django.db import models

class Post(IndexMixin, models.Model):
    """Model definition for Post."""

    title = models.CharField(max_length=255)
    body = models.TextField()

    class Meta:
        """Meta definition for Post."""

        verbose_name = "Post"
        verbose_name_plural = "Posts"

    class MeiliMeta:
        filterable_fields = ("title",)
        searchable_fields = ("id", "title", "body")
        displayed_fields = ("id", "title", "body")

    def __str__(self):
        return self.title

Searching

Now you can search from meilisearch using Model.meilisearch:

Post.meilisearch.search("Hello World") # => <Queryset for Post>

API

MEILISEARCH in settings.py

These are the settings available to the package. The values show are the defaults.

MEILISEARCH = {
    'HTTPS': False, # Whether HTTPS is enabled for the meilisearch server
    'HOST': 'localhost', # The host for the meilisearch server
    'MASTER_KEY': None, # The master key for meilisearch. See https://www.meilisearch.com/docs/learn/security/basic_security for more detail
    'PORT': 7700, # The port for the meilisearch server
    'TIMEOUT': None, # The timeout to wait for when using sync meilisearch server
    'CLIENT_AGENTS': None, # The client agents for the meilisearch server
    'DEBUG': DEBUG, # Whether to throw exceptions on failed creation of documents
    'SYNC': False, # Whether to execute operations to meilisearch in a synchronous manner (waiting for each rather than letting the task queue operate)
    'OFFLINE': False, # Whether to make any http requests for the application.
    'DEFAULT_BATCH_SIZE': 1000, # For syncindex the default batch size for import queryset
}

django_meili.models.IndexMixin

The IndexMixin is how an index is defined on a model. To configure the IndexMixin define a class on the model called MeiliMeta. The IndexMixin defines two new properties on the model:

  1. meilisearch - The queryset used to search.
  2. _meilisearch - the MeiliMeta values available on the model.

In addition, the IndexMixin defines three methods:

  1. meili_filter() - Should this row be synced in meilisearch
  2. meili_serialize() - How the model is serialized into a dictionary
  3. meili_geo() - What does the _geo column look like (optional)

MeiliMeta

The listed values here are default values. The displayed, searchable, filterable, and sortable should all be iterables containing field names, see the example above.

class MeiliMeta:
    displayed_fields = None # the fields displayed when querying meilisearch
    searchable_fields = None # the searchable fields when querying meilisearch
    filterable_fields = None # the fields available to filter by using meilisearch
    sortable_fields = None # the fields that can be sorted by using meilisearch
    supports_geo = False # Does the model support geolocation
    index_name = "<model.__name__>" # the name of the meilisearch index
    primary_key = "pk" # the primary key field for the index

django_meili.querysets.IndexQuerySet

The queryset defines the searchable operations on the index. It attempts to mimic the django queryset API, but differs in 2 notable ways:

  1. To do geo-filtering, you pass a positional argument
  2. Not all queryset operations are implemented.

Commands

python manage.py syncindex

Sync the given index with the current database state. This will always be done synchronously.

python manage.py clearindex

Clear the given index. This will always be done synchronously.

Development

  1. clone the repo
  2. ./bin/setup.sh
  3. ./bin/test.sh
  4. Develop

Contact

If there are any issues, please feel free to make an issue. If you have suggested improvements, please make an issue where we can discuss.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_meili-0.0.13.tar.gz (120.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_meili-0.0.13-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file django_meili-0.0.13.tar.gz.

File metadata

  • Download URL: django_meili-0.0.13.tar.gz
  • Upload date:
  • Size: 120.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.5

File hashes

Hashes for django_meili-0.0.13.tar.gz
Algorithm Hash digest
SHA256 d5563a8b7181148eb3e50a166804a75f7a3e7ac21edb74a97def8202b1f6d0a6
MD5 7b73575506effdb66a7ab9b68af02b1c
BLAKE2b-256 3f9846d92c3463edc9591ea67b20ebc5378ef8ffec8c325fe387e252434a74be

See more details on using hashes here.

File details

Details for the file django_meili-0.0.13-py3-none-any.whl.

File metadata

  • Download URL: django_meili-0.0.13-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.5

File hashes

Hashes for django_meili-0.0.13-py3-none-any.whl
Algorithm Hash digest
SHA256 50575cb3d18a7bfab345abfbef5fcccc091ecb4e3361e39d765e0e6d2c302ecc
MD5 62fdf7357234072ee9ea16887428c53d
BLAKE2b-256 166b2bd1e48fe2729e7c273b846f36bedfbfd994296d6fd586f64163cb438d9d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page