From a2f9ae86935435bcb2a4e9435f5317deb69ee3c0 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Wed, 20 Aug 2025 06:22:34 +0300 Subject: [PATCH] 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`. --- blog/elasticsearch/documents.py | 10 ++++++---- core/elasticsearch/__init__.py | 2 +- core/elasticsearch/documents.py | 22 +++++++++++----------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/blog/elasticsearch/documents.py b/blog/elasticsearch/documents.py index 9a2c8b70..69eef8fd 100644 --- a/blog/elasticsearch/documents.py +++ b/blog/elasticsearch/documents.py @@ -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) diff --git a/core/elasticsearch/__init__.py b/core/elasticsearch/__init__.py index a514e6a5..3c7eeb79 100644 --- a/core/elasticsearch/__init__.py +++ b/core/elasticsearch/__init__.py @@ -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. """ diff --git a/core/elasticsearch/documents.py b/core/elasticsearch/documents.py index f24d7661..7ac1836b 100644 --- a/core/elasticsearch/documents.py +++ b/core/elasticsearch/documents.py @@ -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)