schon/blog/elasticsearch/documents.py
Egor fureunoir Gorbunov ef553a94a4 Refactor Elasticsearch documents for efficiency and clarity
Simplified field definitions and improved code consistency by consolidating and aligning styles. Added `prepare_*` methods to gracefully handle None values for fields. Enhanced multilingual support and streamlined query construction for better maintainability.
2025-05-06 15:32:55 +03:00

31 lines
976 B
Python

from django_elasticsearch_dsl import Document, fields
from django_elasticsearch_dsl.registries import registry
from blog.models import Post
from core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin
class PostDocument(ActiveOnlyMixin, Document):
title = fields.TextField(
attr="title",
analyzer="standard",
fields={
"raw": fields.KeywordField(ignore_above=256),
"ngram": fields.TextField(analyzer="name_ngram", search_analyzer="query_lc"),
"phonetic": fields.TextField(analyzer="name_phonetic"),
},
)
class Index:
name = "posts"
settings = {"number_of_shards": 1, "number_of_replicas": 0,
"analysis": COMMON_ANALYSIS, "index": {"max_ngram_diff": 18}}
class Django:
model = Post
fields = ["uuid"]
def prepare_title(self, instance):
return getattr(instance, "title", "") or ""
registry.register_document(PostDocument)