Table of Contents

Class CategorySearchIndex

Namespace
UsluzionicaServer.Infrastructure.Search
Assembly
UsluzionicaServer.dll

Foldovana imena kategorija, u memoriji.

Zašto ime kategorije NIJE denormalizovano u Listing.SearchTitle: kategorija je zajednička za mnogo oglasa, pa bi admin preimenovanjem jedne kategorije ustajao svaki oglas u njoj — a preimenovanje ne prolazi kroz oglase, pa bi indeks tiho ostao pogrešan. 188 kategorija stane u memoriju bez problema.

Poklapanje je PO TOKENU, ne unija. Za upit „frizer beograd" token „frizer" pogađa kategoriju, a „beograd" ne — pa oglas mora zadovoljiti oba uslova zasebno. Da se vraćala unija, upit bi vratio sve iz te kategorije bez obzira na grad.

Singleton sa TTL-om od 10 minuta. Podaci OSTAJU u memoriji svakog procesa namerno: pogađa se na svakom tokenu svake pretrage, pa mrežni poziv po tokenu ne dolazi u obzir.

Faza B je rešila deljenje: instanca koja izmeni kategorije objavi poruku preko CacheInvalidator, i SVE instance odmah očiste svoju kopiju. TTL ostaje kao rezerva kad Redis nije dostupan.

public sealed class CategorySearchIndex
Inheritance
CategorySearchIndex
Inherited Members

Constructors

CategorySearchIndex(IServiceScopeFactory, CacheInvalidator)

Methods

Invalidate()

Poništava keš — poziva se kad admin izmeni kategorije.

MatchPerTokenAsync(SearchQuery, CancellationToken)

Za svaki token upita vraća skup ID-jeva kategorija čije ime taj token pogađa. Ključ je Value.

Pogođena roditeljska kategorija povlači i sve podkategorije — „beauty" treba da nađe i oglase iz „Frizerski saloni".