<?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>wizualizacja &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/wizualizacja/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 14:05:40 +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.0 i wsparcie grafów</title>
		<link>https://solr.pl/2016/04/25/solr-6-0-i-wsparcie-grafow/</link>
					<comments>https://solr.pl/2016/04/25/solr-6-0-i-wsparcie-grafow/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 25 Apr 2016 20:28:19 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[graf]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[wizualizacja]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=688</guid>

					<description><![CDATA[Jedną z funkcjonalności, która weszła w skład niedawno wydanego Solr 6.0 to wsparcie dla grafów. Mając zbiór dokumentów źródłowych i relację między nimi w postaci informacji o rodzicu każdego dokumentu możemy użyć prostego zapytania i dostać wiele poziomów zagnieżdżenia w]]></description>
										<content:encoded><![CDATA[<p>Jedną z funkcjonalności, która weszła w skład niedawno wydanego <a href="http://solr.pl/2016/04/08/lucene-i-solr-6-0/">Solr 6.0</a> to wsparcie dla grafów. Mając zbiór dokumentów źródłowych i relację między nimi w postaci informacji o rodzicu każdego dokumentu możemy użyć prostego zapytania i dostać wiele poziomów zagnieżdżenia w pojedynczym żądaniu. Warto także pamiętać, iż funkcjonalność o której będziemy rozmawiać działa zarówno w przypadku SolrCloud, jak również w przypadku wdrożeń opartych o master &#8211; slave.</p>
<p><span id="more-688"></span></p>
<p>Do pisania tego wpisu użyliśmy bardzo prostego zbioru danych (możliwe do zaindeksowania pojedynczą komendą) oraz konfiguracji, która dostępna jest na naszym koncie na Github: <a href="https://github.com/solrpl/blog">https://github.com/solrpl/blog</a>.</p>
<h3>Tworzenie kolekcji i indeksowanie danych</h3>
<p>Pierwszą rzeczą, jaką musimy zrobić jest stworzenie odpowiedniej kolekcji i zaindeksowanie danych. Aby to zrobić potrzebujemy uruchomić Solr. Robimy to następującą komendą:
</p>
<pre class="brush:xml">bin/solr start -c
</pre>
<p>Spowoduje to uruchomienie Solr w trybie SolrCloud razem z wbudowaną instancją ZooKeepera. Jak tylko Solr zostanie uruchomiony możemy wysłać konfigurację kolekcji do ZooKeepera. Aby to zrobić używamy poniższego polecenia:
</p>
<pre class="brush:xml">bin/solr zk -upconfig -n graph_test_config -z localhost:9983 -d graph/conf
</pre>
<p>Następnie stworzymy kolekcję o nazwie <i>graph</i> korzystając z następującego polecenia:
</p>
<pre class="brush:xml">curl -XGET 'http://localhost:8983/solr/admin/collections?action=CREATE&amp;name=graph&amp;numShards=2&amp;replicationFactor=1&amp;maxShardsPerNode=2&amp;collection.configName=graph_test_config'
</pre>
<p>I kiedy mamy już to wszystko, możemy zaindeksować trochę danych korzystając z następującego polecenia:
</p>
<pre class="brush:xml">curl -XPOST -H 'Content-Type: application/json' 'http://localhost:8983/solr/graph/update' --data-binary '{
 "add" : { "doc" : { "id" : "1", "name" : "Root document one" } },
 "add" : { "doc" : { "id" : "2", "name" : "Root document two" } },
 "add" : { "doc" : { "id" : "3", "name" : "Root document three" } },
 "add" : { "doc" : { "id" : "11", "parent_id" : "1", "name" : "First level document 1, child one" } },
 "add" : { "doc" : { "id" : "12", "parent_id" : "1", "name" : "First level document 1, child two" } },
 "add" : { "doc" : { "id" : "13", "parent_id" : "1", "name" : "First level document 1, child three" } },
 "add" : { "doc" : { "id" : "21", "parent_id" : "2", "name" : "First level document 2, child one" } },
 "add" : { "doc" : { "id" : "22", "parent_id" : "2", "name" : "First level document 2, child two" } },
 "add" : { "doc" : { "id" : "121", "parent_id" : "12", "name" : "Second level document 12, child one" } },
 "add" : { "doc" : { "id" : "122", "parent_id" : "12", "name" : "Second level document 12, child two" } },
 "add" : { "doc" : { "id" : "131", "parent_id" : "13", "name" : "Second level document 13, child three" } },
 "commit" : {}
}'
</pre>
<p>Relacje między zaindeksowanymi dokumentami można zobrazować następująco:</p>
<p><a href="http://solr.pl/en/2016/04/18/solr-6-0-and-graph-traversal-support/graph-documents-layout/" rel="attachment wp-att-3768"><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-3768" src="http://solr.pl/wp-content/uploads/2016/04/Graph-Documents-Layout.png" alt="Graph Documents Layout" width="605" height="469"></a></p>
<p>Możemy rozpoczynać wyszukiwanie.</p>
<h3>Podstawowe zapytanie</h3>
<p>Aby skorzystać z zapytania obsługującego grafy w podstawowej formie musimy podać kilka informacji. Po pierwsze podajemy zbiór dokumentów, które są będą służyć, jako wierzchołki grafu. Dodatkowo podajemy informację o tym, które pole jest używane jako identyfikator dokumentu oraz które jest używane jako identyfikator rodzica. Na przykład, jeżeli chcielibyśmy znaleźć wierzchołki grafu wraz ze wszystkimi poziomami zagnieżdżenia użylibyśmy następującego zapytania:
</p>
<pre class="brush:xml">http://localhost:8983/solr/graph/select?q=*:*&amp;fq={!graph from=parent_id to=id}name:"root document"
</pre>
<p>Dokumenty które zostały zwrócony przez Solr wyglądają następująco:
</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;response&gt;
 &lt;lst name="responseHeader"&gt;
  &lt;bool name="zkConnected"&gt;true&lt;/bool&gt;
  &lt;int name="status"&gt;0&lt;/int&gt;
  &lt;int name="QTime"&gt;8&lt;/int&gt;
  &lt;lst name="params"&gt;
   &lt;str name="q"&gt;*:*&lt;/str&gt;
   &lt;str name="fq"&gt;{!graph from=parent_id to=id}name:"root document"&lt;/str&gt;
  &lt;/lst&gt;
 &lt;/lst&gt;
 &lt;result name="response" numFound="8" start="0" maxScore="1.0"&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;1&lt;/str&gt;
  &lt;str name="name"&gt;Root document one&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026113003520&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;11&lt;/str&gt;
  &lt;str name="parent_id"&gt;1&lt;/str&gt;
  &lt;str name="name"&gt;First level document 1, child one&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026114052096&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;12&lt;/str&gt;
  &lt;str name="parent_id"&gt;1&lt;/str&gt;
  &lt;str name="name"&gt;First level document 1, child two&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026115100672&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;13&lt;/str&gt;
  &lt;str name="parent_id"&gt;1&lt;/str&gt;
  &lt;str name="name"&gt;First level document 1, child three&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026115100673&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;122&lt;/str&gt;
  &lt;str name="parent_id"&gt;12&lt;/str&gt;
  &lt;str name="name"&gt;Second level document 12, child two&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026120343552&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;2&lt;/str&gt;
  &lt;str name="name"&gt;Root document two&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026109857792&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;3&lt;/str&gt;
  &lt;str name="name"&gt;Root document three&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026110906368&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;21&lt;/str&gt;
  &lt;str name="parent_id"&gt;2&lt;/str&gt;
  &lt;str name="name"&gt;First level document 2, child one&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026111954944&lt;/long&gt;&lt;/doc&gt;
 &lt;/result&gt;
&lt;/response&gt;
</pre>
<p>Jak widać, Solr zwrócił zarówno wierzchołki grafu, jak również wszystkie dokumenty, na wszystkich poziomach zagnieżdżenia.</p>
<h3>Filtrowanie</h3>
<p>Wyniki wyszukiwania mogą być filtrowane korzystając z filtra zdefiniowanego przy pomocy parametru <em>traversalFilter</em>. Pozwala on na zdefiniowanie filtra, który będzie wykorzystany do każdego poziomu zagnieżdżenia oprócz wierzcholków. Na przykład, jeżeli chcielibyśmy dostać tylko dokumenty, które mają term&nbsp;<em>one</em> w polu&nbsp;<em>name</em> moglibyśmy użyć następującego zapytania:
</p>
<pre class="brush:xml">http://localhost:8983/solr/graph/select?q=*:*&amp;fq={!graph from=parent_id to=id traversalFilter=name:one}name:"root document"</pre>
<p>Wyniki wyszukiwania zwrócone przez Solr byłyby następujące:
</p>
<pre class="brush:xml">&lt;pre class="brush:xml"&gt;
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;response&gt;
 &lt;lst name="responseHeader"&gt;
  &lt;bool name="zkConnected"&gt;true&lt;/bool&gt;
  &lt;int name="status"&gt;0&lt;/int&gt;
  &lt;int name="QTime"&gt;7&lt;/int&gt;
  &lt;lst name="params"&gt;
   &lt;str name="q"&gt;*:*&lt;/str&gt;
   &lt;str name="fq"&gt;{!graph from=parent_id to=id traversalFilter=name:one}name:"root document"&lt;/str&gt;
  &lt;/lst&gt;
 &lt;/lst&gt;
 &lt;result name="response" numFound="5" start="0" maxScore="1.0"&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;1&lt;/str&gt;
  &lt;str name="name"&gt;Root document one&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026113003520&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;11&lt;/str&gt;
  &lt;str name="parent_id"&gt;1&lt;/str&gt;
  &lt;str name="name"&gt;First level document 1, child one&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026114052096&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;2&lt;/str&gt;
  &lt;str name="name"&gt;Root document two&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026109857792&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;3&lt;/str&gt;
  &lt;str name="name"&gt;Root document three&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026110906368&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;21&lt;/str&gt;
  &lt;str name="parent_id"&gt;2&lt;/str&gt;
  &lt;str name="name"&gt;First level document 2, child one&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026111954944&lt;/long&gt;&lt;/doc&gt;
 &lt;/result&gt;
&lt;/response&gt;
</pre>
<p>Jak widać, dokumenty zwrócone przez Solr zostały przefiltrowane z użyciem filtra, który zdefiniowaliśmy.</p>
<h3>Zwracanie liści, lub wierzchołków</h3>
<p>Oprócz filtrowania możemy także powiedzieć Solr, aby zwrócone zostały same liście oraz aby pominięte zostały wierzchołki grafu. Aby pominąć zwracanie wierzchołków grafu powinniśmy skorzystać z parametru <em>returnRoot</em> i ustawić go na <em>false</em>, na przykład::
</p>
<pre class="brush:xml">http://localhost:8983/solr/graph/select?q=*:*&amp;fq={!graph from=parent_id to=id returnRoot=false}name:"root document"
</pre>
<p>Wyniki takiego zapytania przedstawiają się następująco:
</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;response&gt;
 &lt;lst name="responseHeader"&gt;
  &lt;bool name="zkConnected"&gt;true&lt;/bool&gt;
  &lt;int name="status"&gt;0&lt;/int&gt;
  &lt;int name="QTime"&gt;10&lt;/int&gt;
  &lt;lst name="params"&gt;
   &lt;str name="q"&gt;*:*&lt;/str&gt;
   &lt;str name="fq"&gt;{!graph from=parent_id to=id returnRoot=false}name:"root document"&lt;/str&gt;
  &lt;/lst&gt;
 &lt;/lst&gt;
 &lt;result name="response" numFound="5" start="0" maxScore="1.0"&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;11&lt;/str&gt;
  &lt;str name="parent_id"&gt;1&lt;/str&gt;
  &lt;str name="name"&gt;First level document 1, child one&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026114052096&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;12&lt;/str&gt;
  &lt;str name="parent_id"&gt;1&lt;/str&gt;
  &lt;str name="name"&gt;First level document 1, child two&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026115100672&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;13&lt;/str&gt;
  &lt;str name="parent_id"&gt;1&lt;/str&gt;
  &lt;str name="name"&gt;First level document 1, child three&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026115100673&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;122&lt;/str&gt;
  &lt;str name="parent_id"&gt;12&lt;/str&gt;
  &lt;str name="name"&gt;Second level document 12, child two&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026120343552&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;21&lt;/str&gt;
  &lt;str name="parent_id"&gt;2&lt;/str&gt;
  &lt;str name="name"&gt;First level document 2, child one&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026111954944&lt;/long&gt;&lt;/doc&gt;
 &lt;/result&gt;
&lt;/response&gt;
</pre>
<p>Jak łatwo zauważyć, wyniki wyszukiwania nie zawierają wierzchołków grafu.</p>
<p>Jeżeli jesteśmy zainteresowani tylko liśćmi, powinniśmy korzystać z parametru <i>returnOnlyLeaf</i> i ustawić go na wartość <i>true</i> (domyślna wartość to <i>false</i>).</p>
<h3>Maksymalna ilość zagnieżdżeń</h3>
<p>Oprócz wymienionych wcześniej możliwości wpływania na zapytanie, możemy także powiedzieć Solr, jak głęboko w graf chcemy spojrzeć korzystając z parametru <i>maxDepth</i>. Domyślnie wartość parametru ustawiona jest na&nbsp;<em>-1</em> co oznacza, że Solr postara się wyświetlić wszystkie poziomy zagnieżdżenia grafu. Na przykład, jeżeli jesteśmy zainteresowani tylko pierwszym poziomem zagnieżdżenia skorzystaliśmy z następującego zapytania:
</p>
<pre class="brush:xml">http://localhost:8983/solr/graph/select?q=*:*&amp;fq={!graph from=parent_id to=id maxDepth=1}name:"root document"
</pre>
<p>Wyniki wyszukiwania zawierać będą jedynie wierzchołki grafu oraz pierwszy poziom zagnieżdżenia:
</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;response&gt;
 &lt;lst name="responseHeader"&gt;
  &lt;bool name="zkConnected"&gt;true&lt;/bool&gt;
  &lt;int name="status"&gt;0&lt;/int&gt;
  &lt;int name="QTime"&gt;10&lt;/int&gt;
  &lt;lst name="params"&gt;
   &lt;str name="q"&gt;*:*&lt;/str&gt;
   &lt;str name="fq"&gt;{!graph from=parent_id to=id maxDepth=1}name:"root document"&lt;/str&gt;
  &lt;/lst&gt;
 &lt;/lst&gt;
 &lt;result name="response" numFound="7" start="0" maxScore="1.0"&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;1&lt;/str&gt;
  &lt;str name="name"&gt;Root document one&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026113003520&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;11&lt;/str&gt;
  &lt;str name="parent_id"&gt;1&lt;/str&gt;
  &lt;str name="name"&gt;First level document 1, child one&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026114052096&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;12&lt;/str&gt;
  &lt;str name="parent_id"&gt;1&lt;/str&gt;
  &lt;str name="name"&gt;First level document 1, child two&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026115100672&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;13&lt;/str&gt;
  &lt;str name="parent_id"&gt;1&lt;/str&gt;
  &lt;str name="name"&gt;First level document 1, child three&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026115100673&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;2&lt;/str&gt;
  &lt;str name="name"&gt;Root document two&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026109857792&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;3&lt;/str&gt;
  &lt;str name="name"&gt;Root document three&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026110906368&lt;/long&gt;&lt;/doc&gt;
 &lt;doc&gt;
  &lt;str name="id"&gt;21&lt;/str&gt;
  &lt;str name="parent_id"&gt;2&lt;/str&gt;
  &lt;str name="name"&gt;First level document 2, child one&lt;/str&gt;
  &lt;long name="_version_"&gt;1531331026111954944&lt;/long&gt;&lt;/doc&gt;
 &lt;/result&gt;
&lt;/response&gt;
</pre>
<h3>Podsumowanie</h3>
<p>Możliwość pracy z grafami jest zdecydowanie kolejną po wsparciu dla SQL oraz replikacji pomiędzy centrami danych w SolrCloud funkcjonalnością na którą warto spojrzeć i o której warto pamiętać. Niestety nie mieliśmy jeszcze okazji testować wydajności opisywanego rodzaju zapytań, ale spróbujemy w kolejnych wpisach przedstawić takie testy.</p>
<h3>Aktualizacja</h3>
<p>Nie wspomnieliśmy, ale jak widać na przykładzie, nie wszystkie dokumenty z naszego testowego indeksowania zostały uwzględnione w wynikach wyszukiwania. Wiąże się to niestety z SolrCloud i wyszukiwaniem rozproszonym. W chwili obecnej, jeżeli chcemy mieć widoczne wszystkie dokumenty, musimy zadać zapytanie do każdej części kolekcji osobno, bądź skorzystać z kolekcji, która zbudowana jest z pojedynczego sharda.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2016/04/25/solr-6-0-i-wsparcie-grafow/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Wizualizacja grafów przy pomocy Solr 6</title>
		<link>https://solr.pl/2016/04/25/wizualizacja-grafow-przy-pomocy-solr-6/</link>
					<comments>https://solr.pl/2016/04/25/wizualizacja-grafow-przy-pomocy-solr-6/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 25 Apr 2016 13:05:02 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[graf]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[wizualizacja]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=891</guid>

					<description><![CDATA[Wraz z premierą Solr 6 dostaliśmy możliwość pracy z grafami podczas korzystania z Solr (zobacz więcej). Korzystając z odpowiednio złożonego zapytania mogliśmy pobrać graf spełniający nasze wymagania. Tego czego brakowało to możliwość wizualizacji zwróconych wyników wyszukiwania. Postanowiliśmy wypełnić tę lukę]]></description>
										<content:encoded><![CDATA[<p>Wraz z premierą Solr 6 dostaliśmy możliwość pracy z grafami podczas korzystania z Solr (<a href="http://solr.pl/2016/04/18/solr-6-0-i-wsparcie-grafow/">zobacz więcej</a>). Korzystając z odpowiednio złożonego zapytania mogliśmy pobrać graf spełniający nasze wymagania. Tego czego brakowało to możliwość wizualizacji zwróconych wyników wyszukiwania. Postanowiliśmy wypełnić tę lukę bardzo prostym narzędziem <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>
<p><span id="more-891"></span></p>
<p>Korzystając z <a href="https://d3js.org/">D3</a>, <a href="http://getbootstrap.com/">Bootstrap</a> i <a href="https://jquery.com/">jQuery</a> stworzyliśmy bardzo proste narzędzie umożliwiające podanie:</p>
<ul>
<li>Adresu Solr</li>
<li>Nazwy kolekcji</li>
<li>Pola wskazującego na rodzica dokumentu</li>
<li>Pola przechowującego identyfikator dokumentu</li>
<li>Pola do wyświetlenia</li>
<li>Maksymalnej liczby dokumentów</li>
<li>Zapytania</li>
</ul>
<p>Na podstawie tych informacji przygotowywana jest bardzo prosta wizualizacja grafu, np:</p>
<p><a href="http://solr.pl/wp-content/uploads/2016/04/solr-graph-visualization-2.png" rel="attachment wp-att-3808"><img decoding="async" class="aligncenter size-full wp-image-3808" src="http://solr.pl/wp-content/uploads/2016/04/solr-graph-visualization-2.png" alt="solr graph visualization" width="500" height="295"></a></p>
<h3>Co jest potrzebne?</h3>
<p>Do wizualizacji potrzebny jest Solr 6 i odpowiednio zaindeksowane dane (<a href="http://solr.pl/2016/04/18/solr-6-0-i-wsparcie-grafow/">więcej tutaj</a>) oraz plik <em>graph.html</em> dostępny na naszym koncie Github (<a href="https://github.com/solrpl/solrgraph">https://github.com/solrpl/solrgraph</a>).</p>
<h3>Instalacja</h3>
<p>Aby skorzystać z wizualizacji grafów wystarczy pobrać wymieniony plik <em>graph.html</em> i umieścić go w katalogu <em>SOLR_HOME/server/solr-webapp/webapp</em>. Następnie uruchamiamy przeglądarkę i idziemy pod adres <em>http://localhost:8983/solr/graph.html</em>. Tym samym omijamy wszelkie problemy związane z <a href="https://pl.wikipedia.org/wiki/Cross-Origin_Resource_Sharing">CORS</a>.</p>
<h3>Ograniczenia</h3>
<p>Należy pamiętać, że funkcjonalność powstała w bardzo krótkim czasie i ma pewne ograniczenia:</p>
<ul>
<li>Nie była testowana na dużej ilości danych</li>
<li>Wrażliwość na CORS</li>
<li>Brzydki wygląd <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;" /></li>
<li>Brak wykorzystania stronicowania</li>
</ul>
<p>Postaramy się pracować nad tymi ograniczeniami w miarę możliwości.</p>
<h3>Następne kroki</h3>
<p>Mamy kilka pomysłów na rozwój tej funkcjonalności. Chcielibyśmy poprawić wygląd, przetestować całość oraz zlikwidować wrażliwość na CORS. Dodatkowo postaramy się rozszerzyć funkcjonalność wprowadzając możliwość filtrowania, podawania różnych zapytań oraz kontroli parametrów związanych z zapytaniem obsługującym grafy. Oczywiście bardzo chętnie usłyszymy Wasze propozycje i przyjmiemy pomoc &#8211; wszystko dostępne jest na Githubie, tak więc zapraszamy <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/2016/04/25/wizualizacja-grafow-przy-pomocy-solr-6/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
