Niniejszym chciałbym rozpocząć mały cykl artykułów opisujący elementy optymalizacji instancji Solr. Na pierwszy rzut pójdzie parametr określający tzw. wielkość okna danych, czyli inaczej query result window. Miejmy nadzieję, że tym artykułem będę w stanie wyjaśnić jak korzystać z tego parametru i jak modyfikować i dostosowywać go do swoich potrzeb.
Na początek
Aby zacząć mówić o konfiguracji parametru należy najpierw powiedzieć w jaki sposób Solr pobiera wyniki za pomocą biblioteki Lucene. Przekazując, wraz z zapytaniem do Solr, parametr rows z wartością np. 20 określamy, iż chcemy aby Solr zwrócił listę wyników składającą się maksymalnie z 20 dokumentów i tyle właśnie widzimy na wynikowej liście. Jednak ilość wyników, jaka została pobrana z indeksu jest różna i określona jest właśnie parametrem queryResultWindowSize. To ten parametr, zapisany w pliku solrconfig.xml, określa jak dużo wyników zostanie pobranych z indeksu i przechowanych w queryResultCache.
Ale do czego służy queryResultWindowSize ?
Parametr queryResultWindowSize określa wielkość, tzw. okna wyników, czyli po prostu ilość dokumentów jaka zostanie pobrana przy pobieraniu wyników wyszukiwania. Na przykład ustawiając queryResultWinwdowSize na wartość 100 i zadając zapytanie:
q=car&rows=30&start=10
na liście wyników wyszukiwania otrzymamy maksymalnie 20 dokumentów wynikowych, natomiast sam Solr pobierze tak naprawdę wyniki zaczynające się od indeksu 0, a kończące się na indeksie 100, a następnie spróbuje je umieścić w queryResultCache. Wyniki wyszukiwania kolejnych zapytań, różniących się jedynie parametrami rows i start będą mogły być pobierane z queryResultCache.
Konfiguracja
Aby ustawić queryResultWindowSize na pokazaną w powyższym przykładzie wartość 100, należy do pliku solrconfig.xml dodać następujący wpis:
<queryResultWindowSize>100</queryResultWindowSize>
O czym należy pamiętać ?
Oczywiście samo ustawienie queryResultsWindowSize to nie jest wszystko. Należy jeszcze zapewnić odpowiednią ilość miejsca w queryResultCache, aby Solr miał możliwość przechowania koniecznych informacji. Natomiast sama konfiguracja queryResultCache to już temat na inny artykuł.
Ale po co korzystać ?
Odpowiedź na tak postawione pytanie jest całkiem proste – jeżeli Twoja aplikacja i Twoi użytkownicy często korzystają ze stronicowania rozsądnym będzie rozważenie zmiany domyślnej wartości queryResultWindowSize. W większości wypadków, gdzie wdrożenia opierały się na stronicowaniu, zmiana wartości omawianego parametru powodowała zwiększenie wydajności ciężkich zapytań przy przechodzeniu pomiędzy stronami wyników.