Техническое задание: Реализация поиска на Elasticsearch
Общая задача
Необходимо разработать серверный модуль (микросервис или часть существующего API) для организации мощного и точного поиска товаров в интернет-магазине строительных материалов. Решение должно быть построено на стеке Node.js и Elasticsearch версии 9.
Блок 1: Конфигурация индекса Elasticsearch
Требуется создать индекс products со следующей кастомной настройкой:
Фильтры символов (Char Filters)
- dimension_fixer: Нормализация обозначений размеров. Замена кириллических символов 'х' и 'Х' на латинскую 'x' (например, преобразование '250х120' в '250x120').
Анализаторы (Analyzers)
- klavka_text: Для обработки названий и описаний товаров.
Цепочка обработки:- Char Filter: dimension_fixer
- Tokenizer: standard
- Filters: lowercase, synonym_graph (с подключением словаря синонимов, например: тротуарка=плитка), russian_stop, russian_stemmer.
- klavka_tech: Для технических полей (марки, коды спецификаций).
Цепочка обработки:- Tokenizer: whitespace
- Filter: lowercase
Важно: Стемминг (отсечение окончаний) применяться не должен, чтобы сохранять точные значения, такие как 'M150'.
Сопоставления полей (Mappings)
- specs_code (text): Технические коды, марки. Используется анализатор klavka_tech.
- dimensions (keyword): Нормализованные размеры.
- name, description (text): Используется анализатор klavka_text.
- brand (keyword + text): Производитель.
- in_stock (boolean): Наличие на складе.
Блок 2: Разработка API
Требуется реализовать API-эндпоинты для поиска, которые будут взаимодействовать с настроенным индексом. Логика должна включать предварительную обработку (препроцессинг) поисковых запросов пользователя для повышения релевантности результатов.