<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>cache &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/cache/feed/" rel="self" type="application/rss+xml" />
	<link>https://solr.pl</link>
	<description>All things to be found - Blog related to Apache Solr &#38; Lucene projects - https://solr.apache.org</description>
	<lastBuildDate>Sat, 14 Nov 2020 08:47:11 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Solr 6.5 i pola typu large &#8211; szybkie spojrzenie</title>
		<link>https://solr.pl/2017/05/01/solr-6-5-i-pola-typu-large-szybkie-spojrzenie/</link>
					<comments>https://solr.pl/2017/05/01/solr-6-5-i-pola-typu-large-szybkie-spojrzenie/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 01 May 2017 07:46:43 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[document]]></category>
		<category><![CDATA[field]]></category>
		<category><![CDATA[large]]></category>
		<category><![CDATA[solr]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=722</guid>

					<description><![CDATA[Jak wiadomo Solr posiada różne możliwości jeżeli chodzi o cachowanie danych &#8211; filterCache dla filtrów, queryResultCache dla wyników zapytań oraz documentCache do cachowania zapytań do szybkiego ich pobierania. Skupimy się dzisiaj na tym ostatnim i co możemy zrobić, aby wykorzystać]]></description>
										<content:encoded><![CDATA[<p>Jak wiadomo Solr posiada różne możliwości jeżeli chodzi o cachowanie danych &#8211; <em>filterCache</em> dla filtrów, <em>queryResultCache</em> dla wyników zapytań oraz <em>documentCache</em> do cachowania zapytań do szybkiego ich pobierania. Skupimy się dzisiaj na tym ostatnim i co możemy zrobić, aby wykorzystać go bardziej optymalnie.</p>
<p><span id="more-722"></span></p>
<h3>Problem</h3>
<p>Kiedy <em>documentCache</em> włączony jest w konfiguracji, po pobraniu dokumentu z Lucene jest on umieszczany w pamięci i trzymany tam do chwili usunięcia z <em>documentCache</em> (czy to przez wielkość cache lub commit). Taka operacja może być dosyć kosztowna &#8211; szczególnie dla dużych dokumentów. Możemy wyobrazić sobie dokumenty, które reprezentują treść strony uzyskanej przez skanowanie tekstu z książki. Problem polega na tym, że każdy wpis w <em>documentCache</em>, jeżeli nie jest ponownie użyty kwalifikuje się jako śmieć. Im więcej śmieci tym więcej pracy musi wykonać garbage collector, a tym samym Solr traci cykle procesora na ten proces zamiast na obsługę zapytań i indeksowanie danych. Może się to oczywiście wiązać z gorszą wydajnością. Na szczęście, zaczynając od Solr 6.5 jesteśmy sobie w stanie z tym poradzić, przynajmniej dla dużych pól typu <em>stored</em>.</p>
<h3>Oznaczenie pola jako large</h3>
<p>Zaczynając od Solr 6.5 dostaliśmy możliwość dodania dodatkowego atrybutu do definicji pola. W przypadku, kiedy nasze pole tekstowe ustawione jest jako <em>stored=&#8221;true&#8221;</em> oraz <em>multiValued=&#8221;false&#8221;</em> możemy dodać do niego atrybut <em>large</em> przyjmujący wartości <em>true</em> lub <em>false</em> (domyślnie <em>false</em>). Tak zdefiniowane pole nie będzie automatycznie umieszczane w <em>documentCache</em>, a umieszczana będzie jedynie referencja do niego z możliwością późniejszego załadowania.</p>
<h3>Sprawdźmy różnicę</h3>
<p>Ze względu na to, że jest to wpis typu <em>szybkie spojrzenie</em> nie będziemy wgłębiać się w kod i szczegóły, a jedynie sprawdzimy dwie kolekcje z tymi samymi danymi i polami. Struktura kolekcji składać się będzie z następujących pól:</p>
<ul>
<li><em>id</em> &#8211; identtyfikator dokumentu,</li>
<li><em>name</em> &#8211; nazwa dokumentu,</li>
<li><em>body</em> &#8211; treść dokumentu, która w założeniach może być bardzo duża.</li>
</ul>
<p>Jedna z kolekcji będzie miała ustawiony atrybut <em>large=&#8221;true&#8221;</em> dla pola <em>body</em>. Dodatkowo zaindeksujemy kilka dokumentów w celu sprawdzenia zachowania się Solr w przypadku obu konfiguracji.</p>
<p>Jeżeli mielibyście ochotę przeprowadzić ten sam test, poniżej przedstawiamy komendy użyte do jego przeprowadzenia (wszystkie pliki pochodzą z naszego konta na Github (<a href="https://github.com/solrpl/">https://github.com/solrpl/</a>). Test polegał będzie na stworzeniu kolekcji, zaindeksowaniu danych, zadaniu zapytania, zebraniu statystyk. Powtórzymy go dla każdej z kolekcji za każdym razem uruchamiają nową, pustą instancję Solr. Wykorzystane komendy wyglądają następująco:
</p>
<pre class="brush:xml">$ mkdir /tmp/solr
$ mkdir /tmp/solr/collection_with_large
$ mkdir /tmp/solr/collection_without_large
$ wget https://github.com/solrpl/blog/tree/master/posts/large_field/data.xml /tmp/solr/data.xml
$ wget https://github.com/solrpl/blog/tree/master/posts/large_field/collection_with_large/managed-schema /tmp/solr/collection_with_large/managed-schema
$ wget https://github.com/solrpl/blog/tree/master/posts/large_field/collection_with_large/solrconfig.xml /tmp/solr/collection_with_large/solrconfig.xml
$ wget https://github.com/solrpl/blog/tree/master/posts/large_field/collection_without_large/managed-schema /tmp/solr/collection_without_large/managed-schema
$ wget https://github.com/solrpl/blog/tree/master/posts/large_field/collection_without_large/solrconfig.xml /tmp/solr/collection_without_large/solrconfig.xml
$ bin/solr zk upconfig -z localhost:9983 -n config_with_large -d /tmp/collection_with_large
$ bin/solr create_collection -c collection_with_large -n config_with_large -shards 1 -replicationFactor 1
$ curl -XPOST 'localhost:8983/solr/collection_with_large/update?commit=true' -H 'Content-Type:application/xml' --data-binary @/tmp/solr/data.xml
$ curl 'localhost:8983/solr/collection_with_large/select?q=*:*'</pre>
<p>A teraz stwórzmy drugą kolekcję używają pobranych danych:
</p>
<pre class="brush:xml">$ bin/solr zk upconfig -z localhost:9983 -n config_without_large -d /tmp/collection_without_large
$ bin/solr create_collection -c collection_without_large -n config_without_large -shards 1 -replicationFactor 1
$ curl -XPOST 'localhost:8983/solr/collection_without_large/update?commit=true' -H 'Content-Type:application/xml' --data-binary @/tmp/solr/data.xml
$ curl 'localhost:8983/solr/collection_without_large/select?q=*:*'</pre>
<p>Sprawdźmy teraz, jak wygląda wykorzystanie <em>documentCache</em> oraz co można znaleźć w jego środku. Tak wygląda&nbsp;<em>documentCache</em> w przypadku kolekcji z polem <em>body</em> oznaczonym jako <em>large=&#8221;true&#8221;</em>:</p>
<p><a href="http://solr.pl/wp-content/uploads/2017/04/field_with_large.png"><img decoding="async" class="aligncenter wp-image-3945 size-medium" src="http://solr.pl/wp-content/uploads/2017/04/field_with_large-300x65.png" alt="" width="300" height="65"></a></p>
<p>A tak wygląda wykorzystanie <em>documentCache</em> z polem <em>body</em> bez oznaczenia jako <em>large=&#8221;true&#8221;</em>:</p>
<p><a href="http://solr.pl/wp-content/uploads/2017/04/field_without_large.png"><img decoding="async" class="aligncenter wp-image-3946 size-medium" src="http://solr.pl/wp-content/uploads/2017/04/field_without_large-300x70.png" alt="" width="300" height="70"></a></p>
<p>Jak łatwo zauważyć pole oznaczone jako <em>large=&#8221;true&#8221;</em> nie zostało dodane do <em>documentCache</em> bezpośrednio, a została dodana &#8222;leniwa&#8221; referencja, która może być wykorzystana w razie potrzeby. Pozwala to na zmniejszenie rozmiaru dokumentów umieszczonych w <em>documentCache</em>, a tym samym mniejsze obciążenie pamięci i mniej pracy dla garbage collectora, co powinno przełożyć się na trochę lepszą wydajność Solr.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2017/05/01/solr-6-5-i-pola-typu-large-szybkie-spojrzenie/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Użycie parametrów cache=false i cost w zapytaniach</title>
		<link>https://solr.pl/2012/03/05/uzycie-parametrow-cachefalse-i-cost-w-zapytaniach/</link>
					<comments>https://solr.pl/2012/03/05/uzycie-parametrow-cachefalse-i-cost-w-zapytaniach/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 05 Mar 2012 22:25:35 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[cache=false]]></category>
		<category><![CDATA[cost]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[fq]]></category>
		<category><![CDATA[koszt]]></category>
		<category><![CDATA[solr]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=404</guid>

					<description><![CDATA[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]]></description>
										<content:encoded><![CDATA[<p>Od chwili premiery <a href="http://solr.pl/2011/09/14/lucene-i-solr-3-4/">Solr 3.4 </a>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.</p>
<p><span id="more-404"></span></p>
<h3>Parametr cache=false</h3>
<p>Ustawiając parametr <em>cache</em> na wartość <em>false</em> mówimy Solr, aby wyniki danego zapytania nie były zapisywanie w cache&#8217;u. Parametr ten może być także użyty w ramach filtra (<em>fq</em>) powodując to samo zachowanie &#8211; wynik działania filtra nie trafi do cache&#8217;u. Co na to daje ? Wyobraźmy sobie następujący filtr, jako część zapytania:
</p>
<pre class="brush:xml">fq={!frange l=10 u=100}log(sum(sqrt(popularity),100))</pre>
<p>Jeżeli wiemy, iż zapytania z tym filtrem zdarzają się sporadycznie, możemy zdecydować, iż nie chcemy tych informacji w cache&#8217;u, aby np. nie powodować zmiany jego stanu poprzez dodawanie zbędnych wpisów. Aby to zrobić dodajemy atrybut <em>cache=false</em> w następujący sposób:
</p>
<pre class="brush:xml">fq={!frange l=10 u=100 cache=false}log(sum(sqrt(popularity),100))</pre>
<p>Dodanie dodatkowego atrybutu spowoduje, że wynik zapytania nie będzie dodany do cache&#8217;u.</p>
<h3>Parametr cost</h3>
<p>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&#8217;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 <em>cost</em>. Weźmy na przykład następujący fragment zapytania:
</p>
<pre class="brush:xml">fq=cat:video&amp;fq={!cache=false cost=50}productGroup:12&amp;fq={!frange l=10 u=100 cache=false cost=150}log(sum(sqrt(popularity),100))</pre>
<p>Na początku zostanie wykonany filtr <em>fq=cat:video</em> ze względu na to, że jego zawartość trafi do cache&#8217;u. Następnie zostanie wykonany filtr z mniejszą wartością parametru <em>cost</em>, czyli filtr <em>fq={!cache=false cost=50}</em>. 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 <em>cost</em> wynosi więcej, niż 100).</p>
<p>Należy pamiętać, że atrybut <em>cost</em> działa tylko wtedy, kiedy filtr nie jest cache&#8217;owany.</p>
<h3>Podsumowanie</h3>
<p>Parametry <em>cache </em>oraz <em>cost</em> pozwalają na kontrolę tego co umieszczane jest w cache&#8217;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 <em>cost</em> większym, niż 100. Warto więc przyjrzeć się swoim zapytaniom i zastanowić się, czy na pewno chcemy cacheować wszystkie wykorzystywane filtry <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2012/03/05/uzycie-parametrow-cachefalse-i-cost-w-zapytaniach/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kilka słów o optymalizacji &#8211; documentCache</title>
		<link>https://solr.pl/2011/08/29/kilka-slow-o-optymalizacji-documentcache/</link>
					<comments>https://solr.pl/2011/08/29/kilka-slow-o-optymalizacji-documentcache/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 29 Aug 2011 19:22:55 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[document]]></category>
		<category><![CDATA[document cache]]></category>
		<category><![CDATA[documentCache]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[solr]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=317</guid>

					<description><![CDATA[Dobrych kilka miesięcy temu (tutaj) przygadaliśmy się działaniu filterCache. Postanowiłem odświeżyć temat i przyjrzeć się do czego może się nam przydać kolejny cache, czyli documentCache. Co przechowuje Utrzymując strukturę poprzedniego wpisu, zacznijmy od środka. Tak więc, documentCache, przechowuje dokumenty Lucene,]]></description>
										<content:encoded><![CDATA[<p>Dobrych kilka miesięcy temu (<a href="http://solr.pl/2011/02/07/kilka-slow-o-optymalizacji-filter-cache/" target="_blank" rel="noopener noreferrer">tutaj</a>) przygadaliśmy się działaniu <em>filterCache</em>. Postanowiłem odświeżyć temat i przyjrzeć się do czego może się nam przydać kolejny cache, czyli <em>documentCache</em>.</p>
<p><span id="more-317"></span></p>
<h3>Co przechowuje</h3>
<p>Utrzymując strukturę poprzedniego wpisu, zacznijmy od środka. Tak więc, <em>documentCache</em>, przechowuje dokumenty Lucene, które zostały pobrane z dysku. Tylko tyle i aż tyle.</p>
<h3>Do czego służy</h3>
<p>Każdy obiekt (dokument Lucene) przechowywany w <em>documentCache</em> zawiera listę referencji do pól, jakie posiada dany dokument. Dzięki temu, raz pobrany dokument z indeksu, jeżeli jest obecny w <em>documentCache</em> nie musi być po raz kolejny pobierany przy kolejnym zapytaniu. W związku z tym, podczas budowania listy wyników wyszukiwania, liczba operacji I/O jest zmniejszana.</p>
<h3>O czym należy pamiętać ?</h3>
<p>Korzystając z <em>documentCache</em> należy pamiętać o dwóch dość ważnych rzeczach:</p>
<ol>
<li><em>documentCache</em> nie może być automatycznie odświeżany ze względu na to, iż operuje na identyfikatorach, które zmieniają się po każdej operacji <em>commit</em>.</li>
<li>W przypadku, kiedy używamy <em>lazyFieldLoading</em>, (czyli ustawienie <em>enableLazyFieldLoading </em>na <em>true</em>) funkcjonalność <em>documentCache</em> jest ograniczona. Oznacza to, że dokument zapisany w cache będzie posiadał tylko te pola, które zostały podane w parametrze <em>fl</em>. Jeżeli w późniejszym czasie Solr trafi na ten dokument w cache, pola, które wcześniej nie były wczytane, zostaną dynamicznie odczytane z indeksu.</li>
</ol>
<h3>Definicja</h3>
<p>Standardowa definicja <em>documentCache&nbsp; </em>wygląda następująco:
</p>
<pre class="brush:xml">&lt;documentCache
      class="solr.FastLRUCache"
     &nbsp;size="16384"
      initialSize="16384"/&gt;</pre>
<p>Przypomnijmy sobie poszczególne parametry:</p>
<ul>
<li><em>class</em> &#8211; klasa odpowiedzialna za implementację,</li>
<li><em>size</em> &#8211; maksymalna wielkość,</li>
<li><em>initialSize</em> &#8211; początkowa wielkość.</li>
</ul>
<h3>Jak skonfigurować</h3>
<p>Odwieczna odpowiedź w przypadku wielkości cache&#8217;u. Jak duży powinien być. Zgodnie z tym co jest napisane na wiki Solr (<a href="http://wiki.apache.org/solr/SolrCaching#documentCache" target="_blank" rel="noopener noreferrer">http://wiki.apache.org/solr/SolrCaching#documentCache</a>), maksymalna wielkość nie powinna być mniejsza niż iloczyn liczby równoległych zapytań i maksymalnej liczby dokumentów pobieranych przez zapytania. Dość prosta zależność, która zagwarantuje, że Solr nie będzie musiał ponownie pobierać dokumentów podczas przetwarzania zapytania.</p>
<h3>Kilka słów na koniec</h3>
<p>W odróżnieniu od <em>filterCache</em>, w przypadku <em>documentCache</em> nie musimy martwić się o to, jak konstruujemy zapytania, aby dobrze wykorzystać ten cache. Należy jednak pamiętać, iż <em>documentCache</em> wymaga tym więcej pamięci, im więcej pól przechowywanych jest w indeksie.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2011/08/29/kilka-slow-o-optymalizacji-documentcache/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kilka słów o optymalizacji &#8211; filter cache</title>
		<link>https://solr.pl/2011/02/07/kilka-slow-o-optymalizacji-filter-cache/</link>
					<comments>https://solr.pl/2011/02/07/kilka-slow-o-optymalizacji-filter-cache/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 07 Feb 2011 08:02:49 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[filter cache]]></category>
		<category><![CDATA[filterCache]]></category>
		<category><![CDATA[filtr]]></category>
		<category><![CDATA[filtrowanie]]></category>
		<category><![CDATA[query]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=180</guid>

					<description><![CDATA[Dzisiejszy wpis poświęcony został jednemu z typów cache w Solr &#8211; filter cache. Postaram się przedstawić do czego służy, jak go skonfigurować i jak go optymalnie wykorzystywać. Zapraszam do lektury. Co przechowuje Zacznijmy od środka. FilterCache przechowuje nieuporządkowany zbiór identyfikatorów]]></description>
										<content:encoded><![CDATA[<p>Dzisiejszy wpis poświęcony został jednemu z typów cache w Solr &#8211; filter cache. Postaram się przedstawić do czego służy, jak go skonfigurować i jak go optymalnie wykorzystywać. Zapraszam do lektury.</p>
<p><span id="more-180"></span></p>
<h3>Co przechowuje</h3>
<p>Zacznijmy od środka. FilterCache przechowuje nieuporządkowany zbiór identyfikatorów dokumentów. Oczywiście nie są to identyfikatory zdefiniowanie w pliku <em>schema.xml</em> jako unikalny klucz, a wewnętrzne identyfikatory dokumentów używane przez Lucene i Solr &#8211; warto o tym pamiętać.</p>
<h3>Do czego służy</h3>
<p>Głównym zadaniem <em>filterCache </em>jest przechowywanie wyników związanych z wykorzystaniem filtrów. Aczkolwiek nie jest to jego jedyne zastosowanie. Oprócz tego cache ten może służyć jako pomoc przy facetingu (w przypadku korzystania z metody <em>TermEnum</em>) oraz do sortowania w przypadku określenia opcji <em>&lt;useFilterForSortedQuery/&gt;</em> na <em>true</em> w pliku<em> solrconfig.xml</em>.</p>
<h3>Definicja</h3>
<p>Standardowa definicja filterCache wygląda następująco:
</p>
<pre class="brush:xml">&lt;filterCache
      class="solr.FastLRUCache"
      size="16384"
      initialSize="4096"
      autowarmCount="4096" /&gt;</pre>
<p>Dostępne są następujące opcje konfiguracyjne:</p>
<ul>
<li><em>class </em>&#8211; klasa odpowiadająca za implementację. Do <em>filterCache </em>polecam korzystanie z <em>solr.FastLRUCache</em>, który charakteryzuje się większą wydajnością w przypadku większej ilości operacji GET, niż PUT.</li>
<li><em>size </em>&#8211; maksymalna ilość wpisów jaka może znaleźć się w cache&#8217;u.</li>
<li><em>initialSize </em>&#8211; początkowa wielkość cache&#8217;u.</li>
<li><em>autowarmCount </em>&#8211; ilość wpisów jaka będzie przepisywana podczas rozgrzewania ze starego cache&#8217;u do nowego.</li>
<li><em>minSize </em>&#8211; wartość określająca do jakiej ilości wpisów Solr będzie próbował redukować cache w przypadku pełnego uzupełnienia.</li>
<li><em>acceptableSize </em>&#8211; jeżeli Solr nie będzie w stanie sprowadzić ilości wpisów do tej określonej za pomocą parametru <em>minSize</em>, to wartość <em>acceptableSize</em> będzie tą, do której będzie dążył jako kolejnej.</li>
<li><em>cleanupThread </em>&#8211; wartość domyślna to <em>false</em>. W przypadku ustawienia na <em>true</em> do czyszczenia cache&#8217;u będzie wykorzystywany oddzielny wątek.</li>
</ul>
<p>W większości przypadków wykorzystanie parametrów <em>size</em>, <em>initialSize</em> oraz <em>autowarmCount </em>jest w zupełności wystarczające.</p>
<h3>Jak skonfigurować</h3>
<p>Wielkość cache&#8217;u powinna być określana na podstawie zapytań, które wysyłane są do Solr. Maksymalna wielkość <em>filterCache </em>powinna być przynajmniej tak duża jak ilość filtrów (wraz z wartościami) jaką wykorzystujemy. Oznacza to, że jeżeli nasza aplikacja charakteryzuje się, w zadanym okresie czasu, wykorzystaniem np. 2000 różnych filtrów (parametrów <em>fq</em> wraz z wartościami), to parametr <em>size</em> powinien być ustawiony na wartości minimum 2000.</p>
<h3>Efektywne wykorzystanie</h3>
<p>Jednak samo skonfigurowanie cache&#8217;u to nie koniec &#8211; ważne, aby zapytania potrafiły to wykorzystać. Weźmy na przykład zapytanie:
</p>
<pre class="brush:xml">q=nazwa:solr+AND+kategoria:ksiazka+AND+dzial:ksiazki</pre>
<p>Na pierwszy rzut oka zapytanie jest jak najbardziej poprawne. Jest z nim jednak jeden problem &#8211; nie korzysta z <em>filterCache</em>. Całe zapytanie zostanie obsłużone przez <em>queryResultCache</em> i stworzy w nim pojedynczy wpis. Zmodyfikujemy je trochę i zadajmy je w następujący sposób.
</p>
<pre class="brush:xml">q=nazwa:solr&amp;fq=kategoria:ksiazka&amp;fq=dzial:ksiazki</pre>
<p>Co się stanie teraz ? Tak jak w poprzednim wypadku, stworzony zostanie jeden wpis w <em>queryResultCache</em> oraz dwa wpisy w <em>filterCache</em>. Dlaczego jest to ważne ? Weźmy kolejne zapytanie:
</p>
<pre class="brush:xml">q=nazwa:lucene&amp;fq=kategoria:ksiazka&amp;fq=dzial:ksiazki</pre>
<p>To zapytanie stworzyłoby kolejny wpis w <em>queryResultCache</em> oraz wykorzystałoby dwa już istniejące w <em>filterCache</em> wpisy, a tym samym Solr skróciłbym czas wykonania zapytaniai oszczędziłby operacji I/O na indeksie.</p>
<p>Jeżeli natomiast wykonalibyśmy zapytanie w postaci:
</p>
<pre class="brush:xml">q=nazwa:lucene+AND+kategoria:ksiazka+AND+dzial:ksiazki</pre>
<p>Solr nie byłby w stanie wykorzystać żadnych informacji z cache&#8217;u i musiałby w celu zalezienia wyników pobierać wszystkie informacje z indeksu Lucene.</p>
<h3>Kilka słów na koniec</h3>
<p>Jak widać, samo skonfigurowanie cache&#8217;u w poprawny sposób nie gwarantuje tego, że Solr będzie w stanie go wykorzystać. To od tego jak zadajemy zapytania zależy, jak wydajny w docelowym wdrożeniu będzie Solr. Warto o tym pamiętać podczas planowania wdrożenia.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2011/02/07/kilka-slow-o-optymalizacji-filter-cache/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kilka słow o optymalizacji &#8211; query result window size</title>
		<link>https://solr.pl/2011/01/10/kilka-slow-o-optymalizacji-query-result-window-size/</link>
					<comments>https://solr.pl/2011/01/10/kilka-slow-o-optymalizacji-query-result-window-size/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 10 Jan 2011 07:59:20 +0000</pubDate>
				<category><![CDATA[Ogólna]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[query result]]></category>
		<category><![CDATA[queryResultCache]]></category>
		<category><![CDATA[queryResultWindowSize]]></category>
		<category><![CDATA[result]]></category>
		<category><![CDATA[size]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=174</guid>

					<description><![CDATA[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]]></description>
										<content:encoded><![CDATA[<p>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.</p>
<p><span id="more-174"></span></p>
<h3>Na początek</h3>
<p>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 <em>rows </em>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 <em>queryResultWindowSize</em>. To ten parametr, zapisany w pliku <em>solrconfig.xml</em>, określa jak dużo wyników zostanie pobranych z indeksu i przechowanych w <em>queryResultCache</em>.</p>
<h3>Ale do czego służy <em>queryResultWindowSize</em> ?</h3>
<p>Parametr <em>queryResultWindowSize</em> określa wielkość, tzw. okna wyników, czyli po prostu ilość dokumentów jaka zostanie pobrana przy pobieraniu wyników wyszukiwania.&nbsp; Na przykład ustawiając <em>queryResultWinwdowSize</em> na wartość 100 i zadając zapytanie:
</p>
<pre class="brush:xml">q=car&amp;rows=30&amp;start=10</pre>
<p>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 <em>queryResultCache</em>. Wyniki wyszukiwania kolejnych zapytań, różniących się jedynie parametrami <em>rows </em>i <em>start</em> będą mogły być pobierane z <em>queryResultCache</em>.</p>
<h3>Konfiguracja</h3>
<p>Aby ustawić <em>queryResultWindowSize</em> na pokazaną w powyższym przykładzie wartość 100, należy do pliku <em>solrconfig.xml</em> dodać następujący wpis:
</p>
<pre class="brush:xml">&lt;queryResultWindowSize&gt;100&lt;/queryResultWindowSize&gt;</pre>
<h3>O czym należy pamiętać ?</h3>
<p>Oczywiście samo ustawienie <em>queryResultsWindowSize</em> to nie jest wszystko. Należy jeszcze zapewnić odpowiednią ilość miejsca w <em>queryResultCache</em>, aby Solr miał możliwość przechowania koniecznych informacji. Natomiast sama konfiguracja <em>queryResultCache</em> to już temat na inny artykuł.</p>
<h3>Ale po co korzystać ?</h3>
<p>Odpowiedź na tak postawione pytanie jest całkiem proste &#8211; jeżeli Twoja aplikacja i Twoi użytkownicy często korzystają ze stronicowania rozsądnym będzie rozważenie zmiany domyślnej wartości <em>queryResultWindowSize</em>. 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.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2011/01/10/kilka-slow-o-optymalizacji-query-result-window-size/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
