Custom Django integration for MeiliSearch.
Project description
Django-Meili
A package to integrate Meilisearch with Django in a seamless way.
Usage
Set the following variables in settings.py
.
MEILISEARCH = {
"HOST": "localhost",
"PORT": 7700,
"HTTPS": False,
"MASTER_KEY": "...",
"SYNC": False, # Should Meilisearch action resolve before continuing
}
Register the app in INSTALLED_APPS
INSTALLED_APPS = [
...,
"django_meili",
...,
]
Just subclass django_meili.models.IndexMixin
from django_meili.models import IndexMixin
class Post(IndexMixin, models.Model):
id = models.UUIDField()
title = models.CharField(max_length=255)
body = models.TextField()
# Attributes to handle in Meilisearch
displayed_fields = ("title", "body")
searchable_fields = ("title", "body")
def __str__(self):
return self.title
Then when you are ready to search this model, just use the built-in "queryset".
Post.objects.create(title="Hello", body="World")
posts = Post.meilisearch.search("hello") # Returns a Django Queryset of results
print(posts.first()) # Hello
API
django_meili.models.IndexQuerySet
This is a custom queryset built to mimic Django's queryset. Currently does not support Q
objects, but that is a plan for the future.
Methods:
Name | Description | Example |
---|---|---|
getitem | Use slices to set limit and offset. The default is 20 and 0 respectively. | Post.meilisearch[:10] |
count | Return the total number of documents within the index. Does not reflect the count for the search query | Post.meilisearch.count() |
order_by | Takes a Django order_by parameter and sets a sort value based on that. Can take multiple sorts |
Post.meilisearch.order_by("-likes") |
filter | Takes a Django filter query. Supports: lte , gte , lt , gt , exact , in , range , isnull , exists |
Post.meilisearch.filter(title__exact="Hello World") |
matching_strategy | Set the default strategy. Defaults to last |
Post.meilisearch.matching_strategy('all') |
attributes_to_search_on | Choose what fields to search on, defaults to all. | Post.meilisearch.attributes_to_search_on("title", "body") |
search | Executes the actual search. Takes an optional query and returns a Django Queryset of results | Post.meilisearch.search() |
django_meili.models.IndexMixin
Subclass Parameters:
Name | Type | Description |
---|---|---|
index_name | Optional[str] |
The name of the index to generate. Defaults to __name__ attribute. |
primary_key | Optional[str] |
The primary key of the index. Defaults to pk . |
Attributes:
Name | Type | Description |
---|---|---|
displayed_fields | tuple[str] |
The fields to display. By default uses all. |
searchable_fields | tuple[str] |
The fields to search. By default uses all. |
filterable_fields | tuple[str] |
The fields to filter. By default uses none. |
meilisearch | django_meili.models.IndexQuerySet |
The queryset used for filtering and searching |
Copyright 2024 Ian Kollipara <ian.kollipara@cune.edu>
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.2.tar.gz
(97.5 kB
view hashes)
Built Distribution
Close
Hashes for django_meili-0.0.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dae9b873c41fdd3a5fd978341538111064c3b28e072d92378ee597ec32fe2d50 |
|
MD5 | b3226e0b6872c390db1a6ce7ab7b1dd8 |
|
BLAKE2b-256 | e1c8a037da82f0d8104d67d2f840ac6a3583f9abf940d9dbcb5f9a2ff2b95f38 |