<?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>real &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/real/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>Wed, 11 Nov 2020 20:41:38 +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 4.0: Realtime GET</title>
		<link>https://solr.pl/2012/01/09/solr-4-0-realtime-get/</link>
					<comments>https://solr.pl/2012/01/09/solr-4-0-realtime-get/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 09 Jan 2012 20:35:54 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[get]]></category>
		<category><![CDATA[near]]></category>
		<category><![CDATA[near real time]]></category>
		<category><![CDATA[nrt]]></category>
		<category><![CDATA[real]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[time]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=343</guid>

					<description><![CDATA[Kolejną funkcjonalnością, jakiej postanowiłem się przyjrzeć, w związku ze zbliżającym się Solr 4.0, jest tzw. &#8222;Realtime Get&#8221;. Jest to funkcjonalność umożliwiająca wyszukiwanie danych, które nie zostały jeszcze dodane do indexu, czyli po ich indeksowaniu nie zostało wysłane polecenie commit. Spójrzmy]]></description>
										<content:encoded><![CDATA[<p>Kolejną funkcjonalnością, jakiej postanowiłem się przyjrzeć, w związku ze zbliżającym się Solr 4.0, jest tzw. &#8222;Realtime Get&#8221;. Jest to funkcjonalność umożliwiająca wyszukiwanie danych, które nie zostały jeszcze dodane do indexu, czyli po ich indeksowaniu nie zostało wysłane polecenie <em>commit</em>. Spójrzmy zatem, jak to działa.</p>
<p><span id="more-343"></span></p>
<h3>Trochę teorii</h3>
<p>Aktualizacja danych w Lucene i Solr ma jeden zasadniczy minus &#8211; w przypadku standardowego korzystania nie jesteśmy w stanie zobaczyć zmian w indeksie, do chwili, kiedy nie zostanie wywołane polecenie <em>commit</em>. Problem polega na tym, iż operacja <em>commit </em>jest stosunkowo droga pod względem wydajnościowym i zbyt częste jej używanie może powodować problemy. Z związku z tym, jeżeli podczas implementacji aplikacji wykorzystującej Lucene lub Solr możesz być postawiony przed wyborem: albo wysoka wydajność, albo szybko widoczne zmiany. W związku z tym twórcy Lucene i Solr podjęli prace w kierunku umożliwiającym wyszukiwanie <em>Near Real Time</em> (NRT). W Lucene mamy już tą możliwość, w wersji 4.0 Solr także się jej doczekamy, ale nie tylko jej.</p>
<h3>Konfiguracja</h3>
<p>Aby funkcjonalność Realtime Get miała możliwość działania, potrzebujemy skonfigurować następujące rzeczy:</p>
<h4>Log transakcyjny</h4>
<p>Pierwsza z rzeczy koniecznych do uruchomienia funkcjonalności Realtime Get to zapisywanie loga transakcyjnego. W tym celu do konfiguracji <em>updateHandler&#8217;a</em> dodajemy następujący wpis:
</p>
<pre class="brush:xml">&lt;updateLog&gt;
  &lt;str name="dir"&gt;
<p>Powyższy wpis oznacza, iż katalog z logiem transakcyjnym zostanie zapisany w katalogu, gdzie zapisywane są dane.</p>
<h4>Realtime Get handler</h4>
<p>Druga rzecz, którą musimy zrobić, aby zobaczyć Realtime Get w działaniu, to zdefiniowanie odpowiedniego handlera (bądź komponentu). W tym celu do pliku <em>solrconfig.xml </em>dodajemy następujący wpis:
</p>
<pre class="brush:xml">&lt;requestHandler name="/get" class="solr.RealTimeGetHandler"&gt;
  &lt;lst name="defaults"&gt;
    &lt;str name="omitHeader"&gt;true&lt;/str&gt;
  &lt;/lst&gt;
&lt;/requestHandler&gt;</pre>
<p>Powyższy wpis, to nic innego jak zdefiniowanie nowego handlera, opartego o klasę <em>solr.RealTimeGetHandler</em>, który umożliwia wyszukiwanie w oparciu o log transakcyjny.</p>
<h3>Działanie</h3>
<p>Aby sprawdzić działanie <em>Realtime Get</em> postanowiłem zrobić dość prosty test. Najpierw zaindeksowałem jeden plik (z tych które dostępne są w katalogu <em>exampledocs</em>) za pomocą następującego polecenia:
</p>
<pre class="brush:bash">curl 'http://localhost:8983/solr/update' -d @hd.xml -H 'Content-type:application/xml'</pre>
<p>Oczywiście, po indeksowaniu nie wysyłamy polecenia <em>commit</em>. Zgodnie z oczekiwaniami, zadanie zapytania w postaci:
</p>
<pre class="brush:bash">http://localhost:8983/solr/select?q=*:*</pre>
<p>nie zwraca wyników wyszukiwania. Sprawdźmy więc, czy handler zarejestrowany jako <em>/get</em> jest w stanie dostarczyć nam wyniki. Wywołuję zatem następujące zapytanie:
</p>
<pre class="brush:bash">http://localhost:8983/solr/get?id=SP2514N</pre>
<p>W odpowiedzi, na powyższe zapytanie otrzymujemy następujący dokument:
</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;response&gt;
&lt;doc name="doc"&gt;
  &lt;str name="id"&gt;SP2514N&lt;/str&gt;
  &lt;str name="name"&gt;Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133&lt;/str&gt;
  &lt;str name="manu"&gt;Samsung Electronics Co. Ltd.&lt;/str&gt;
  &lt;str name="manu_id_s"&gt;samsung&lt;/str&gt;
  &lt;arr name="cat"&gt;
    &lt;str&gt;electronics&lt;/str&gt;
    &lt;str&gt;hard drive&lt;/str&gt;
  &lt;/arr&gt;
  &lt;arr name="features"&gt;
    &lt;str&gt;7200RPM, 8MB cache, IDE Ultra ATA-133&lt;/str&gt;
    &lt;str&gt;NoiseGuard, SilentSeek technology, Fluid Dynamic Bearing (FDB) motor&lt;/str&gt;
  &lt;/arr&gt;
  &lt;float name="price"&gt;92.0&lt;/float&gt;
  &lt;int name="popularity"&gt;6&lt;/int&gt;
  &lt;bool name="inStock"&gt;true&lt;/bool&gt;
  &lt;date name="manufacturedate_dt"&gt;2006-02-13T15:26:37Z&lt;/date&gt;
  &lt;str name="store"&gt;35.0752,-97.032&lt;/str&gt;&lt;/doc&gt;
&lt;/response&gt;</pre>
<p>Zatem otrzymaliśmy dokument, który nie został jeszcze dodany do indeksu.</p>
<h3>Możliwe zastosowanie</h3>
<p>Zauważyliście pewnie, że aby pobrać dokument musiałem podać jego identyfikator (możliwe jest także podanie listy identyfikatorów). To prawda, <em>Realtime Get</em> przynajmniej w tym momencie, nie wspiera pełnego wyszukiwania, ponieważ nie do tego został stworzony. Funkcjonalność ta jest w stanie pokazać aktualizację dokumentów, których znamy identyfikatory - np. poprzez dodanie komponentu wykorzystywanego w <em>solr.RealTimeGetHandler</em> do dowolnego innego handlera. Dodatkowo nie musimy się bać o wydajność - komponent jest bardzo szybki. Zatem, jeżeli jednym z problemów twojej aplikacji opartej na Solr, jest problem z długim oczekiwaniem na aktualizację możesz z uśmiechem patrzeć w przyszłość <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;" /><em></em></p>
<h3>Podsumowując</h3>
<p>Funkcjonalność ta niesie za sobą bardzo dużo możliwości jeżeli chodzi o Solr, a także jego rozwój w kierunku SolrCloud. Na podstawie loga transakcyjnego będzie możliwe zaimplementowanie, np. automatycznego odtwarzania instancji Solr w klastrze, czy aktualizacji instancji w bardzo szybkim czasie. Jak widać wersja 4.0 to nie tylko usprawnienia w kierunku wyszukiwania, ale także rozwój Solr w kierunku baz NOSQL.</p>
<p>{solr.data.dir:}&lt;/str&gt;<br />
&lt;/updateLog&gt;</p>
<p>Powyższy wpis oznacza, iż katalog z logiem transakcyjnym zostanie zapisany w katalogu, gdzie zapisywane są dane.</p>
<h4>Realtime Get handler</h4>
<p>Druga rzecz, którą musimy zrobić, aby zobaczyć Realtime Get w działaniu, to zdefiniowanie odpowiedniego handlera (bądź komponentu). W tym celu do pliku <em>solrconfig.xml </em>dodajemy następujący wpis:
</p>
<pre wp-pre-tag-1=""></pre>
<p>Powyższy wpis, to nic innego jak zdefiniowanie nowego handlera, opartego o klasę <em>solr.RealTimeGetHandler</em>, który umożliwia wyszukiwanie w oparciu o log transakcyjny.</p>
<h3>Działanie</h3>
<p>Aby sprawdzić działanie <em>Realtime Get</em> postanowiłem zrobić dość prosty test. Najpierw zaindeksowałem jeden plik (z tych które dostępne są w katalogu <em>exampledocs</em>) za pomocą następującego polecenia:
</p>
<pre wp-pre-tag-2=""></pre>
<p>Oczywiście, po indeksowaniu nie wysyłamy polecenia <em>commit</em>. Zgodnie z oczekiwaniami, zadanie zapytania w postaci:
</p>
<pre wp-pre-tag-3=""></pre>
<p>nie zwraca wyników wyszukiwania. Sprawdźmy więc, czy handler zarejestrowany jako <em>/get</em> jest w stanie dostarczyć nam wyniki. Wywołuję zatem następujące zapytanie:
</p>
<pre wp-pre-tag-4=""></pre>
<p>W odpowiedzi, na powyższe zapytanie otrzymujemy następujący dokument:
</p>
<pre wp-pre-tag-5=""></pre>
<p>Zatem otrzymaliśmy dokument, który nie został jeszcze dodany do indeksu.</p>
<h3>Możliwe zastosowanie</h3>
<p>Zauważyliście pewnie, że aby pobrać dokument musiałem podać jego identyfikator (możliwe jest także podanie listy identyfikatorów). To prawda, <em>Realtime Get</em> przynajmniej w tym momencie, nie wspiera pełnego wyszukiwania, ponieważ nie do tego został stworzony. Funkcjonalność ta jest w stanie pokazać aktualizację dokumentów, których znamy identyfikatory &#8211; np. poprzez dodanie komponentu wykorzystywanego w <em>solr.RealTimeGetHandler</em> do dowolnego innego handlera. Dodatkowo nie musimy się bać o wydajność &#8211; komponent jest bardzo szybki. Zatem, jeżeli jednym z problemów twojej aplikacji opartej na Solr, jest problem z długim oczekiwaniem na aktualizację możesz z uśmiechem patrzeć w przyszłość <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;" /><em></em></p>
<h3>Podsumowując</h3>
<p>Funkcjonalność ta niesie za sobą bardzo dużo możliwości jeżeli chodzi o Solr, a także jego rozwój w kierunku SolrCloud. Na podstawie loga transakcyjnego będzie możliwe zaimplementowanie, np. automatycznego odtwarzania instancji Solr w klastrze, czy aktualizacji instancji w bardzo szybkim czasie. Jak widać wersja 4.0 to nie tylko usprawnienia w kierunku wyszukiwania, ale także rozwój Solr w kierunku baz NOSQL.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2012/01/09/solr-4-0-realtime-get/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
