<?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>document &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/document/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>Solr 4.0: DocTransformers &#8211; pierwsze spojrzenie</title>
		<link>https://solr.pl/2011/12/05/solr-4-0-doctransformers-pierwsze-spojrzenie/</link>
					<comments>https://solr.pl/2011/12/05/solr-4-0-doctransformers-pierwsze-spojrzenie/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 05 Dec 2011 20:33:18 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[doctransformers]]></category>
		<category><![CDATA[document]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[transformation]]></category>
		<category><![CDATA[transformer]]></category>
		<category><![CDATA[transformers]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=337</guid>

					<description><![CDATA[Dzisiejszy wpis jest kolejnym z serii, w której staramy się przybliżyć funkcjonalności jakie pojawią się w wersji 4.0 Apache Solr. Dzisiaj przyjrzymy się funkcjonalności pozwalającej na zmianę sposobu w jaki zwracane są pola w dokumentach. Po co mi taka funkcjonalność]]></description>
										<content:encoded><![CDATA[<p>Dzisiejszy wpis jest kolejnym z serii, w której staramy się przybliżyć funkcjonalności jakie pojawią się w wersji 4.0 Apache Solr. Dzisiaj przyjrzymy się funkcjonalności pozwalającej na zmianę sposobu w jaki zwracane są pola w dokumentach.</p>
<p><span id="more-337"></span></p>
<h3>Po co mi taka funkcjonalność ?</h3>
<p>Do tej pory, praktycznie, nie mieliśmy możliwości wpływania na to, jak budowane były odpowiedzi zwracane przez Solr. Wraz z pojawieniem się wersji 4.0 Solr dostaniemy do ręki nowe narzędzie, tzw<em>. DocTransformers</em>. Funkcjonalność ta pozwala na modyfikację pól w wynikach wyszukiwania zwróconych przez Solr. Patrząc na to, co w tym momencie jest dostępne, mamy na przykład możliwość zamiany nazw zwracanych pól, czy oznaczenia elementów dodawanych przez <em>QueryElevationComponent</em>. W tym momencie nie jest tego dużo, natomiast implementacja własnego <em>DocTransformer&#8217;a </em>nie jest trudna, o czym za chwilę.</p>
<h3>Co jest już dostępne</h3>
<p>W tym momencie, w wersji 4.0 Apache Solr dostępne są następujące funkcjonalności związane z <em>DocTransformer&#8217;ami</em>:</p>
<ul>
<li>Możliwość oznaczenia, które dokumenty zostały dodane przez <em>QueryElevationComponent</em>.</li>
<li>Możliwość dodania informacji explain do dokumentu.</li>
<li>Możliwość dodania stałej wartości jako pola do dokumentu.</li>
<li>Możliwość dodania informacji o shardzie z jakiego pochodzi danych dokument.</li>
<li>Możliwość dodania informacji <em>docid</em> jako pola dokumentu (identyfikator wykorzystywany przez Lucene).</li>
</ul>
<h3>Jak z tego skorzystać ?</h3>
<p>Sprawdźmy, jak wygląda wykorzystanie tej funkcjonalności. Do tego celu pobrałem najnowszą wersję Apache Solr z repozytorium i uruchomiłem przykładowe wdrożenie. Następnie zaindeksowałem przykładowe dane i zadałem następujące zapytanie:
</p>
<pre class="brush:xml">http://localhost:8983/solr/select?q=encoded&amp;fl=name,score,[docid],[explain]</pre>
<p>W powyższym zapytaniu warto przyjrzeć się parametrowi <em>fl</em>. Oprócz informacji takich, jak pole <em>name</em> oraz wartość <em>score</em> powiedzieliśmy Solr, że chcemy, aby do wygenerowania wyników wyszukiwania zostały wykorzystane dwa <em>DocTransformery</em>: <em>[docid]</em> oraz <em>[explain]</em>. W odpowiedzi Solr wygenerował następującego XML&#8217;a:
</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;response&gt;
 &lt;lst name="responseHeader"&gt;
  &lt;int name="status"&gt;0&lt;/int&gt;
  &lt;int name="QTime"&gt;2&lt;/int&gt;
  &lt;lst name="params"&gt;
    &lt;str name="q"&gt;encoded&lt;/str&gt;
    &lt;str name="fl"&gt;name,score,[docid],[explain]&lt;/str&gt;
  &lt;/lst&gt;
 &lt;/lst&gt;
 &lt;result name="response" numFound="2" start="0" maxScore="0.50524884"&gt;
 &lt;doc&gt;
  &lt;str name="name"&gt;Test with some GB18030 encoded characters&lt;/str&gt;
  &lt;float name="score"&gt;0.50524884&lt;/float&gt;
  &lt;int name="[docid]"&gt;0&lt;/int&gt;
  &lt;str name="[explain]"&gt;
  0.50524884 = (MATCH) weight(text:encoded in 0) [DefaultSimilarity], result of:
    0.50524884 = score(doc=0,freq=1.0 = termFreq=1), product of:
      1.0000001 = queryWeight, product of:
        3.2335923 = idf(docFreq=2, maxDocs=28)
        0.3092536 = queryNorm
      0.5052488 = fieldWeight in 0, product of:
        1.0 = tf(freq=1.0), with freq of:
          1.0 = termFreq=1
        3.2335923 = idf(docFreq=2, maxDocs=28)
        0.15625 = fieldNorm(doc=0)
  &lt;/str&gt;
 &lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="name"&gt;Test with some UTF-8 encoded characters&lt;/str&gt;
  &lt;float name="score"&gt;0.4041991&lt;/float&gt;
  &lt;int name="[docid]"&gt;25&lt;/int&gt;
  &lt;str name="[explain]"&gt;
  0.4041991 = (MATCH) weight(text:encoded in 25) [DefaultSimilarity], result of:
    0.4041991 = score(doc=25,freq=1.0 = termFreq=1), product of:
      1.0000001 = queryWeight, product of:
        3.2335923 = idf(docFreq=2, maxDocs=28)
        0.3092536 = queryNorm
      0.40419903 = fieldWeight in 25, product of:
        1.0 = tf(freq=1.0), with freq of:
          1.0 = termFreq=1
        3.2335923 = idf(docFreq=2, maxDocs=28)
        0.125 = fieldNorm(doc=25)
  &lt;/str&gt;
 &lt;/doc&gt;
&lt;/result&gt;
&lt;/response&gt;</pre>
<p>Jak widać, Solr dołączył do wyników wyszukiwania to o co go prosiliśmy.</p>
<h3>Własna implementacja</h3>
<p>Omówmy, jak wygląda implementacja własnego <em>DocTransfomer&#8217;a</em>. Poniżej, przykład klasy <em>RenameFieldsTransformer </em>z pakietu <em>org.apache.solr.response.transform</em>. Ogólnie polega to na implementacji następujących metod z klasy <em>DocTransformer</em> z pakietu <em>org.apache.solr.response.transform</em>:</p>
<ul>
<li><code>String getName()</code> &#8211; metoda zwracająca nazwę transformera,</li>
<li><code>void transform(SolrDocument doc, int docid)</code> &#8211; metoda dokonująca transformacji.</li>
</ul>
<p>Sama implementacja wygląda następująco:
</p>
<pre class="brush:java">public class RenameFieldsTransformer extends DocTransformer {
 final NamedList&lt;String&gt; rename;

 public RenameFieldsTransformer( NamedList&lt;String&gt; rename ) {
  this.rename = rename;
 }

 @Override
 public String getName() {
  StringBuilder str = new StringBuilder();
  str.append( "Rename[" );
  for( int i=0; i&lt; rename.size(); i++ ) {
   if( i &gt; 0 ) {
    str.append( "," );
   }
   str.append( rename.getName(i) ).append( "&gt;&gt;" ).append( rename.getVal( i ) );
  }
  str.append( "]" );
  return str.toString();
 }

 @Override
 public void transform(SolrDocument doc, int docid) {
  for( int i=0; i&lt;rename.size(); i++ ) {
   Object v = doc.remove( rename.getName(i) );
   if( v != null ) {
    doc.setField(rename.getVal(i), v);
   }
  }
 }
}</pre>
<p>Powyższy kod umożliwia zwrócenie pola o innej nazwie, niż ta, która została zaindeksowana. Metoda <em>transform</em> iteruje po wszystkich wartościach zmiennej <em>rename</em>, która zawiera nazwę pól, które mają zostać zmienione wraz z nazwami na jakie powinny zostać zamienione. Należy pamiętać, iż, aby nasz własny transformer zaczął działać, należy dodać go do pliku <em>solrconfig.xml</em>. Oto przykład w wiki Solr:
</p>
<pre class="brush:xml">&lt;transformer name="elevated" class="org.apache.solr.response.transform.EditorialMarkerFactory" /&gt;</pre>
<h3>Podsumowując</h3>
<p>Należy pamiętać, iż opisywana funkcjonalność jest oznaczona jako eksperymentalna i jej działanie może się zmienić w stosunku do opisywanego w chwili publikacji wersji 4.0 Solr i Lucene. Na pewno wrócimy do tematu po ukazaniu się Solr 4.0.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2011/12/05/solr-4-0-doctransformers-pierwsze-spojrzenie/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>
	</channel>
</rss>
