<?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>2272 &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/2272/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 08:12:03 +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>Czekając na 4.0: Solr-2272, czyli Solr i funkcjonlaność Join</title>
		<link>https://solr.pl/2011/02/21/czekajac-na-4-0-solr-2272-czyli-solr-i-funkcjonlanosc-join/</link>
					<comments>https://solr.pl/2011/02/21/czekajac-na-4-0-solr-2272-czyli-solr-i-funkcjonlanosc-join/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 21 Feb 2011 08:11:32 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[2272]]></category>
		<category><![CDATA[join]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[solr-2272]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=201</guid>

					<description><![CDATA[W ostatnim czasie moją uwagę przykuła funkcjonalność opisania w zgłoszeniu SOLR-2272, czyli funkcjonalność SQL&#8217;owego JOIN zaimplementowanego w Solr. W dzisiejszym wpisie przyjrzymy się bliżej tej funkcjonalności. Przygotowanie Pierwszą rzeczą jaką musimy zrobić to pobranie kodu z głównej gałęzi (trunk) repozytorium]]></description>
										<content:encoded><![CDATA[<p>W ostatnim czasie moją uwagę przykuła funkcjonalność opisania w zgłoszeniu <a href="https://issues.apache.org/jira/browse/SOLR-2272" target="_blank" rel="noopener noreferrer">SOLR-2272</a>, czyli funkcjonalność SQL&#8217;owego JOIN zaimplementowanego w Solr. W dzisiejszym wpisie przyjrzymy się bliżej tej funkcjonalności.</p>
<p><span id="more-201"></span></p>
<h3>Przygotowanie</h3>
<p>Pierwszą rzeczą jaką musimy zrobić to pobranie kodu z głównej gałęzi (<em>trunk</em>) repozytorium SVN projektów Lucene/Solr i dodanie nałożenie na ten kod łatki załączonej do zgłoszenia <a href="https://issues.apache.org/jira/browse/SOLR-2272" target="_blank" rel="noopener noreferrer">SOLR-2272</a>. Później kilka chwil na zbudowanie Solr i możemy przystępować do testów.</p>
<h3>Struktura indeksu</h3>
<p>Do celów testowych zdecydowałem się zdefiniować następującą strukturę indeksu:
</p>
<pre class="brush:xml">&lt;fields&gt;
  &lt;field name="id" type="string" indexed="true" stored="true" required="true" /&gt;
  &lt;field name="name" type="text" indexed="true" stored="true"/&gt;
  &lt;field name="color" type="string" indexed="true" stored="true"/&gt;
  &lt;field name="parent" type="string" indexed="true" stored="true"/&gt;
&lt;/fields&gt;</pre>
<p>Sama struktura jest raczej prosta. Pole <em>id</em> odpowiada za przechowywanie unikalnego identyfikatora dokumentu. Pole <em>name</em> odpowiada za nazwę dokumentu, <em>color</em> to kolor produktu, a pole <em>parent</em> to identyfikator rodzica.</p>
<h3>Dane testowe</h3>
<p>Plik z przykładowymi danymi wygląda następująco:
</p>
<pre class="brush:xml">&lt;add&gt;
 &lt;doc&gt;
  &lt;field name="id"&gt;1&lt;/field&gt;
  &lt;field name="name"&gt;First document&lt;/field&gt;
  &lt;field name="color"&gt;Red&lt;/field&gt;
 &lt;/doc&gt;
 &lt;doc&gt;
  &lt;field name="id"&gt;2&lt;/field&gt;
  &lt;field name="name"&gt;Second document&lt;/field&gt;
  &lt;field name="color"&gt;Yellow&lt;/field&gt;
 &lt;/doc&gt;
 &lt;doc&gt;
  &lt;field name="id"&gt;3&lt;/field&gt;
  &lt;field name="name"&gt;Third document&lt;/field&gt;
  &lt;field name="color"&gt;Red&lt;/field&gt;
  &lt;field name="parent"&gt;1&lt;/field&gt;
 &lt;/doc&gt;
 &lt;doc&gt;
  &lt;field name="id"&gt;4&lt;/field&gt;
  &lt;field name="name"&gt;Fourth document&lt;/field&gt;
  &lt;field name="color"&gt;Yellow&lt;/field&gt;
  &lt;field name="parent"&gt;1&lt;/field&gt;
 &lt;/doc&gt;
&lt;/add&gt;</pre>
<h3>Przykład zapytania</h3>
<p>Do krótkich testów jakie przeprowadziłem wybrałem dość prosty przypadek. W odpowiedzi na zapytanie chciałem dostać dokumenty, które są rodzicami dokumentów posiadających w polu <em>color</em> wartość <em>Yellow</em>. Nic nadzwyczajnego, przynajmniej w rozumieniu SQL.<em></em> Aby wykonać takie zapytanie w standardowym Solr musielibyśmy wykonać przynajmniej dwa zapytania &#8211; pierwsze o dokumenty z odpowiednią wartością w polu, a następnie o dokumenty rodziców. A jak wygląda to w przypadku Solr 4.0 i łatki ze zgłoszenia SOLR-2272 ? Poniżej zapytanie:
</p>
<pre class="brush:xml">http://localhost:8983/solr/select?q={!join from=parent to=id}color:Yellow</pre>
<p>I odpowiedź Solr:
</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;1&lt;/int&gt;
  &lt;lst name="params"&gt;
    &lt;str name="q"&gt;{!join from=parent to=id}color:Yellow&lt;/str&gt;
  &lt;/lst&gt;
&lt;/lst&gt;
&lt;result name="response" numFound="1" start="0"&gt;
  &lt;doc&gt;
    &lt;str name="color"&gt;Red&lt;/str&gt;
    &lt;str name="id"&gt;1&lt;/str&gt;
    &lt;str name="name"&gt;First document&lt;/str&gt;
  &lt;/doc&gt;
&lt;/result&gt;
&lt;/response&gt;</pre>
<p>Jak widać dostaliśmy wyniki takie, jakich się spodziewaliśmy. Jednak jak działa to zapytanie ? Jak widać na załączonym przykładzie oprócz standardowego pobrania dokumentów, które mają w polu jakąś wartość (<em>color:Yellow</em>) dochodzi dość specyficzna konstrukcja <em>{!join from=parent to=id}</em>. Fragment ten mówi Solr, aby pokazać nie dokumenty oryginalne, ale te, które mają wartość w polu <em>id </em>taką samą jak pole <em>parent </em>dokumentów spełniających wcześniejszy warunek.</p>
<h3>Weryfikacja</h3>
<p>Sprawdźmy, czy to działa. Najpierw pobierzmy dokumenty, które spełniają posiadają w polu <em>color</em> wartość <em>Yellow</em>.W tym celu zadajemy zapytanie:
</p>
<pre class="brush:xml">http://localhost:8983/solr/select?q=color:Yellow</pre>
<p>Odpowiedź Solr, była następująca:
</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;color:Yellow&lt;/str&gt;
  &lt;/lst&gt;
&lt;/lst&gt;
&lt;result name="response" numFound="2" start="0"&gt;
  &lt;doc&gt;
    &lt;str name="color"&gt;Yellow&lt;/str&gt;
    &lt;str name="id"&gt;2&lt;/str&gt;
    &lt;str name="name"&gt;Second document&lt;/str&gt;
  &lt;/doc&gt;
  &lt;doc&gt;
    &lt;str name="color"&gt;Yellow&lt;/str&gt;
    &lt;str name="id"&gt;4&lt;/str&gt;
    &lt;str name="name"&gt;Fourth document&lt;/str&gt;
    &lt;str name="parent"&gt;1&lt;/str&gt;
  &lt;/doc&gt;
&lt;/result&gt;
&lt;/response&gt;</pre>
<p>Mamy zatem jeden dokument, który posiada wartość w polu <em>parent</em> &#8211; wartość ta to <em>1</em>. Dokument o <em>id </em>równym jeden jest następujacy:
</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;4&lt;/int&gt;
  &lt;lst name="params"&gt;
    &lt;str name="indent"&gt;true&lt;/str&gt;
    &lt;str name="q"&gt;id:1&lt;/str&gt;
  &lt;/lst&gt;
&lt;/lst&gt;
&lt;result name="response" numFound="1" start="0"&gt;
  &lt;doc&gt;
    &lt;str name="color"&gt;Red&lt;/str&gt;
    &lt;str name="id"&gt;1&lt;/str&gt;
    &lt;str name="name"&gt;First document&lt;/str&gt;
  &lt;/doc&gt;
&lt;/result&gt;
&lt;/response&gt;</pre>
<p>Widać zatem, że zapytanie z JOIN&#8217;em zadziałało prawidłowo <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h3>Kilka słów na koniec</h3>
<p>Warto pamiętać, że w obecnej chwili funkcjonalność jest w fazie rozwojowej i może się zmieniać. Ważne jest jednak to, że w wersji 4.0 Solr będziemy mogli cieszyć się funkcjonalnością podobną do SQL&#8217;owego JOIN.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2011/02/21/czekajac-na-4-0-solr-2272-czyli-solr-i-funkcjonlanosc-join/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
