Od chwili premiery Solr 3.4 użytkownicy otrzymali całkiem ciekawą funkcjonalność pozwalającą na określenie, czy wynik działania filtra, bądź zapytanie mają być cachowane. Oprócz tego dostaliśmy do ręki możliwość określania kosztu filtra. Przyjrzyjmy się zatem tym parametrom.
Parametr cache=false
Ustawiając parametr cache na wartość false mówimy Solr, aby wyniki danego zapytania nie były zapisywanie w cache’u. Parametr ten może być także użyty w ramach filtra (fq) powodując to samo zachowanie – wynik działania filtra nie trafi do cache’u. Co na to daje ? Wyobraźmy sobie następujący filtr, jako część zapytania:
fq={!frange l=10 u=100}log(sum(sqrt(popularity),100))
Jeżeli wiemy, iż zapytania z tym filtrem zdarzają się sporadycznie, możemy zdecydować, iż nie chcemy tych informacji w cache’u, aby np. nie powodować zmiany jego stanu poprzez dodawanie zbędnych wpisów. Aby to zrobić dodajemy atrybut cache=false w następujący sposób:
fq={!frange l=10 u=100 cache=false}log(sum(sqrt(popularity),100))
Dodanie dodatkowego atrybutu spowoduje, że wynik zapytania nie będzie dodany do cache’u.
Parametr cost
Dodatkowa możliwość oferowana przez Solr 3.4 to określenie ciężaru, jaki niesie filtr w przypadku filtrów, których nie chcemy cache’ować. Filtry z określonym ciężarem wykonywane są na samym końcu, po wszystkich wcześniejszych filtrach. Sam koszt określamy podając liczbę całkowitą jako wartość atrybutu cost. Weźmy na przykład następujący fragment zapytania:
fq=cat:video&fq={!cache=false cost=50}productGroup:12&fq={!frange l=10 u=100 cache=false cost=150}log(sum(sqrt(popularity),100))
Na początku zostanie wykonany filtr fq=cat:video ze względu na to, że jego zawartość trafi do cache’u. Następnie zostanie wykonany filtr z mniejszą wartością parametru cost, czyli filtr fq={!cache=false cost=50}. Na sam koniec Solr zostawi sobie najbardziej kosztowny filtr. Dodatkowo ostatni filtr zostanie nałożony tylko na dokumenty, które pasują do zapytania i wszystkich pozostałych filtrów (ze względu na to, że atrybut cost wynosi więcej, niż 100).
Należy pamiętać, że atrybut cost działa tylko wtedy, kiedy filtr nie jest cache’owany.
Podsumowanie
Parametry cache oraz cost pozwalają na kontrolę tego co umieszczane jest w cache’u Solr, co jest przydatne wtedy kiedy wiemy jakie zapytania zadawane są do naszych instancji Solr. Co więcej, w przypadku korzystania z obu z nich jesteśmy w stanie poprawić wydajność niektórych zapytań, szczególnie tych z atrybutem cost większym, niż 100. Warto więc przyjrzeć się swoim zapytaniom i zastanowić się, czy na pewno chcemy cacheować wszystkie wykorzystywane filtry 🙂