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
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".