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.
31 lines
976 B
Python
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)
|