Features: 1) Rename _BaseDoc to BaseDocument for clarity and consistency; 2) Expose _add_multilang_fields as add_multilang_fields for broader use;

Fixes: 1) Correct `name_ngram` search analyzer in `PostDocument` to `icu_query`;

Extra: 1) Update import paths and references following renaming of `BaseDocument` and `add_multilang_fields`.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-08-20 06:22:34 +03:00
parent 167dafefb1
commit a2f9ae8693
3 changed files with 18 additions and 16 deletions

View file

@ -1,17 +1,18 @@
from django_elasticsearch_dsl import Document, fields
from django_elasticsearch_dsl import fields
from django_elasticsearch_dsl.registries import registry
from blog.models import Post
from core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin
from core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin, add_multilang_fields
from core.elasticsearch.documents import BaseDocument
class PostDocument(ActiveOnlyMixin, Document):
class PostDocument(ActiveOnlyMixin, BaseDocument):
title = fields.TextField(
attr="title",
analyzer="standard",
fields={
"raw": fields.KeywordField(ignore_above=256),
"ngram": fields.TextField(analyzer="name_ngram", search_analyzer="query_lc"),
"ngram": fields.TextField(analyzer="name_ngram", search_analyzer="icu_query"),
"phonetic": fields.TextField(analyzer="name_phonetic"),
},
)
@ -33,4 +34,5 @@ class PostDocument(ActiveOnlyMixin, Document):
return getattr(instance, "title", "") or ""
add_multilang_fields(PostDocument)
registry.register_document(PostDocument)

View file

@ -329,7 +329,7 @@ COMMON_ANALYSIS = {
}
def _add_multilang_fields(cls):
def add_multilang_fields(cls):
"""
Dynamically add multilingual name/description fields and prepare methods to guard against None.
"""

View file

@ -2,11 +2,11 @@ from django_elasticsearch_dsl import Document, fields
from django_elasticsearch_dsl.registries import registry
from health_check.db.models import TestModel
from core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin, _add_multilang_fields
from core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin, add_multilang_fields
from core.models import Brand, Category, Product
class _BaseDoc(Document):
class BaseDocument(Document):
name = fields.TextField(
attr="name",
analyzer="standard",
@ -44,7 +44,7 @@ class _BaseDoc(Document):
return getattr(instance, "description", "") or ""
class ProductDocument(ActiveOnlyMixin, _BaseDoc):
class ProductDocument(ActiveOnlyMixin, BaseDocument):
rating = fields.FloatField(attr="rating")
total_orders = fields.IntegerField(attr="total_orders")
brand_priority = fields.IntegerField(
@ -79,7 +79,7 @@ class ProductDocument(ActiveOnlyMixin, _BaseDoc):
},
)
class Index(_BaseDoc.Index):
class Index(BaseDocument.Index):
name = "products"
class Django:
@ -87,14 +87,14 @@ class ProductDocument(ActiveOnlyMixin, _BaseDoc):
fields = ["uuid"]
_add_multilang_fields(ProductDocument)
add_multilang_fields(ProductDocument)
registry.register_document(ProductDocument)
class CategoryDocument(ActiveOnlyMixin, _BaseDoc):
class CategoryDocument(ActiveOnlyMixin, BaseDocument):
priority = fields.IntegerField(attr="priority")
class Index(_BaseDoc.Index):
class Index(BaseDocument.Index):
name = "categories"
class Django:
@ -102,14 +102,14 @@ class CategoryDocument(ActiveOnlyMixin, _BaseDoc):
fields = ["uuid"]
_add_multilang_fields(CategoryDocument)
add_multilang_fields(CategoryDocument)
registry.register_document(CategoryDocument)
class BrandDocument(ActiveOnlyMixin, _BaseDoc):
class BrandDocument(ActiveOnlyMixin, BaseDocument):
priority = fields.IntegerField(attr="priority")
class Index(_BaseDoc.Index):
class Index(BaseDocument.Index):
name = "brands"
class Django:
@ -117,7 +117,7 @@ class BrandDocument(ActiveOnlyMixin, _BaseDoc):
fields = ["uuid"]
_add_multilang_fields(BrandDocument)
add_multilang_fields(BrandDocument)
registry.register_document(BrandDocument)