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 django_elasticsearch_dsl.registries import registry
from blog.models import Post 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( title = fields.TextField(
attr="title", attr="title",
analyzer="standard", analyzer="standard",
fields={ fields={
"raw": fields.KeywordField(ignore_above=256), "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"), "phonetic": fields.TextField(analyzer="name_phonetic"),
}, },
) )
@ -33,4 +34,5 @@ class PostDocument(ActiveOnlyMixin, Document):
return getattr(instance, "title", "") or "" return getattr(instance, "title", "") or ""
add_multilang_fields(PostDocument)
registry.register_document(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. 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 django_elasticsearch_dsl.registries import registry
from health_check.db.models import TestModel 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 from core.models import Brand, Category, Product
class _BaseDoc(Document): class BaseDocument(Document):
name = fields.TextField( name = fields.TextField(
attr="name", attr="name",
analyzer="standard", analyzer="standard",
@ -44,7 +44,7 @@ class _BaseDoc(Document):
return getattr(instance, "description", "") or "" return getattr(instance, "description", "") or ""
class ProductDocument(ActiveOnlyMixin, _BaseDoc): class ProductDocument(ActiveOnlyMixin, BaseDocument):
rating = fields.FloatField(attr="rating") rating = fields.FloatField(attr="rating")
total_orders = fields.IntegerField(attr="total_orders") total_orders = fields.IntegerField(attr="total_orders")
brand_priority = fields.IntegerField( brand_priority = fields.IntegerField(
@ -79,7 +79,7 @@ class ProductDocument(ActiveOnlyMixin, _BaseDoc):
}, },
) )
class Index(_BaseDoc.Index): class Index(BaseDocument.Index):
name = "products" name = "products"
class Django: class Django:
@ -87,14 +87,14 @@ class ProductDocument(ActiveOnlyMixin, _BaseDoc):
fields = ["uuid"] fields = ["uuid"]
_add_multilang_fields(ProductDocument) add_multilang_fields(ProductDocument)
registry.register_document(ProductDocument) registry.register_document(ProductDocument)
class CategoryDocument(ActiveOnlyMixin, _BaseDoc): class CategoryDocument(ActiveOnlyMixin, BaseDocument):
priority = fields.IntegerField(attr="priority") priority = fields.IntegerField(attr="priority")
class Index(_BaseDoc.Index): class Index(BaseDocument.Index):
name = "categories" name = "categories"
class Django: class Django:
@ -102,14 +102,14 @@ class CategoryDocument(ActiveOnlyMixin, _BaseDoc):
fields = ["uuid"] fields = ["uuid"]
_add_multilang_fields(CategoryDocument) add_multilang_fields(CategoryDocument)
registry.register_document(CategoryDocument) registry.register_document(CategoryDocument)
class BrandDocument(ActiveOnlyMixin, _BaseDoc): class BrandDocument(ActiveOnlyMixin, BaseDocument):
priority = fields.IntegerField(attr="priority") priority = fields.IntegerField(attr="priority")
class Index(_BaseDoc.Index): class Index(BaseDocument.Index):
name = "brands" name = "brands"
class Django: class Django:
@ -117,7 +117,7 @@ class BrandDocument(ActiveOnlyMixin, _BaseDoc):
fields = ["uuid"] fields = ["uuid"]
_add_multilang_fields(BrandDocument) add_multilang_fields(BrandDocument)
registry.register_document(BrandDocument) registry.register_document(BrandDocument)