SearchService отвечает за индексацию текстовых данных (товары, категории и др.) и быстрый полнотекстовый поиск по ключевым словам. Его задача - по входному запросу вернуть набор идентификаторов товаров максимально быстро, с учётом синонимов, опечаток и типичных ошибок написания. Контроль доступа - через сессию (NBSession).
SetSynonymsAsync(pairs: KeywordPair[]): void - установить список пар синонимов.GetSynonymsAsync(): KeywordPair[] - получить актуальный словарь синонимов (например, «шпатлевка → шпаклевка»).SetTyposAsync(pairs: KeywordPair[]): void - задать перечень типовых опечаток (символьные замены). Этот список критичен к производительности, его нельзя раздувать.GetTyposAsync(): KeywordPair[] - вернуть текущие опечатки (например, «о→а», «с→cc»).SetMisspellingsAsync(pairs: KeywordPair[]): void - задать список ошибок написания целых слов. Дубли уже покрытых «typos» не включаются.GetMisspellingsAsync(): KeywordPair[] - вернуть словарь ошибок написания (например, «ломинат → ламинат»).FeedAsync(feeds: FeedPackage[]): void - передать пакеты данных для индексации (источник, тип, ключевые поля/фразы, метка времени).SearchProductsIds(query: string, filters: QueryFilter[], sortType: QuerySortTypeEnum): int[] - выполнить поиск и вернуть идентификаторы товаров, соответствующих запросу и фильтрам, в указанном порядке сортировки.synonyms, typos, misspellings (слово-замены и символьные замены). Это расширяет «поле находок» без дублирования.FeedAsync, в индексе хранятся «ключевые слова» и поля («Keywords»). По ним и производится быстрый матч.QueryFilter (категория, бренд, «в наличии» и типовые атрибуты), см. ниже.sortType (тип перечисления определён в контракте QuerySortTypeEnum).QueryFilter состоит из FilterTypeId и набора Values. По умолчанию FilterTypeId - это идентификатор типа атрибута товара, но предусмотрены специальные значения от 2 000 000 000 и выше:
FILTER_CATEGORY = 2_000_000_000 // фильтр по категории
FILTER_IN_STOCK = 2_000_000_001 // фильтр "в наличии"
FILTER_BRAND = 2_000_000_002 // фильтр по бренду
Значения Values интерпретируются в контексте типа фильтра (набор id категорий/брендов, булевы значения и т. п.).
KeywordPairstring Source //исходная форма (что искать/заменять)
string Target //целевая форма (на что заменять/добавлять в поиск)
Используется в словарях: synonyms, typos, misspellings.
FeedPackagelong Id //идентификатор пакета
int SourceId //идентификатор источника (например, товара/категории)
string SourceType //тип источника (строка вместо enum для независимости и сериализации)
string[] Keywords //ключевые слова/фразы для индексации
long Timestamp //Unix timestamp (секунды)
Пакеты формируют/обновляют индекс; тип хранится строкой для упрощения сериализации и ослабления связности.
QueryFilterint FilterTypeId //тип фильтра: id типа атрибута либо специальные константы (см. выше)
string[] Values //значения фильтра (строки)
Фильтры комбинируются: итоговая выдача - пересечение условий.
typos - самый чувствительный ко времени отклика; держите его минимальным и осмысленным.synonyms и misspellings повышают полноту, но добавляют ветвления - поддерживайте их в актуальном состоянии и избегайте «шумных» правил.DirectoryService обновляем словари в момент получения обновления своей базы и момент первоначальной загрузки.Не используется.