<?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>json &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/json/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>Fri, 13 Nov 2020 21:25: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 5 &#8211; JSON API, część pierwsza</title>
		<link>https://solr.pl/2015/12/21/solr-5-json-api-czesc-pierwsza/</link>
					<comments>https://solr.pl/2015/12/21/solr-5-json-api-czesc-pierwsza/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 21 Dec 2015 21:25:17 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[5]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[solr]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=678</guid>

					<description><![CDATA[Solr 5 wprowadził wiele zmian do świata Solr, zarówno w kwestii API, jak i samych funkcjonalności. Jedną z wprowadzonych nowości było wprowadzenie API opartego o JSON pozwalającego na zadawanie zapytań w sposób trochę bardziej przyjazny człowiekowi, przynajmniej porównując do długich]]></description>
										<content:encoded><![CDATA[<p>Solr 5 wprowadził wiele zmian do świata Solr, zarówno w kwestii API, jak i samych funkcjonalności. Jedną z wprowadzonych nowości było wprowadzenie API opartego o JSON pozwalającego na zadawanie zapytań w sposób trochę bardziej przyjazny człowiekowi, przynajmniej porównując do długich zapytań opartych o zapytania URI. W tym poście postaramy przybliżyć możliwości korzystania z tego API.</p>
<h2><span id="more-678"></span><br />
Zadawanie zapytań</h2>
<p>Jestem pewien, że wiesz jak zadaje się zapytania do Solr, tak jak jesteśmy przyzwyczajeni. Zatem, aby dostać dokumenty, które mają term <em>solr</em> w polu <em>_text_</em> moglibyśmy użyć następującej komendy:</p>
<pre class="brush:xml">curl -XGET 'localhost:8983/solr/gettingstarted/select?q=_text_:solr&amp;indent=true'
</pre>
<p>Gwoli wyjaśnienia &#8211; korzystam z jednego z przykładów dostarczonych wraz z Solr (<em>schemaless</em>), a zaindeksowane dane to dokumenty znajdujące się w katalogu <em>docs</em> dostarczanym razem z Solr.</p>
<p>Oczywiście, powyższe zapytanie można zadać także używając JSON API. Aby Solr zwrócił nam dokładnie te same wyniki wyszukiwania, które dostaliśmy w przypadku zapytania powyżej, skorzystalibyśmy z następującej komendy:</p>
<pre class="brush:xml">curl -XGET 'localhost:8983/solr/gettingstarted/query' -d '{
 "query":"_text_:solr"
}'
</pre>
<p>Przyjemne i proste &#8211; jak widać, wszystko co musimy zrobić, to przekazać obiekt JSON jako payload żądania, który będzie posiadał pole <em>query</em>, za pomocą którego przekazujemy nasze zapytanie. Taki obiekt wysłaliśmy do handlera <em>/query</em> ze względu, że skonfigurowany jest, aby domyślnie odpowiadać w formacie JSON. Oczywiście moglibyśmy skorzystać z handlera <em>/select</em>, ale wtedy odpowiedź zwrócona zostałaby w formacie XML.</p>
<p>Jeżeli chodzi o zadawanie zapytań, to zamiast przekazywania obiektu JSON, możemy przekazać standardowe parametry. Dokładnie tak, nie musimy przekazywać ich jako parametrów URI, ale w ciele żądania:</p>
<pre class="brush:xml">curl -XGET 'localhost:8983/solr/gettingstarted/query' -d 'q=_text_:solr'
</pre>
<p>Tym razem, nie mamy obiektu JSON. Standardowy parametr <em>q</em> został przekazany w ciele żądania i przesłany do handlera <em>/query</em>. Jeżeli chcemy przekazać więcej parametrów oddzielamy je znakiem <em>&amp;</em>.</p>
<h2>Stronnicowanie</h2>
<p>Oczywiście, korzystając z JSON API możemy także kontrolować stronicowanie. W tym celu korzystamy z dwóch parametrów &#8211; <em>limit</em> oraz <em>offset</em>. Pierwszy z nich, <em>limit</em> definiuje maksymalną liczbę dokumentów jaką Solr może zwrócić. Parametr <em>offset</em> odpowiedzialny jest za określenie od którego dokumentu wyniki wyszukiwania mają być pokazywane. Na przykład, aby dostać maksymalnie 20 dokumentów zaczynając od jedenastego wykorzystalibyśmy następujące zapytanie:</p>
<pre class="brush:xml">curl -XGET 'localhost:8983/solr/gettingstarted/query' -d '{
 "query":"_text_:solr",
 "limit":20,
 "offset":10
}'
</pre>
<h2>Sortowanie</h2>
<p>Kolejna rzecz to możliwość sortowania wyników wyszukiwania &#8211; oczywiście, także dostępna. Aby posortować nasze wyniki wyszukiwania na podstawie pola o nazwie <em>id</em> malejąco użylibyśmy następującego zapytania:</p>
<pre class="brush:xml">curl -XGET 'localhost:8983/solr/gettingstarted/query' -d '{
 "query":"_text_:solr",
 "sort":"id desc"
}'
</pre>
<p>Jak widać definicja sortowania jest taka sama, jak w przypadku sortowania w kiedy korzystamy z parametrów URI i parametru <em>sort</em>.</p>
<h2>Filtrowanie</h2>
<p>Na koniec zostawiliśmy sobie filtrowanie. Do filtrowania wykorzystujemy właściwość <em>filter</em> obiekty JSON przesyłanego w ciele żądania. Na przykład zapytanie zawężąjące wyniki wyszukiwania tylko do tych dokumentów, które mają wartość <em>text/html</em> w polu <em>content_type</em> wyglądałoby następująco:</p>
<pre class="brush:xml">curl -XGET 'localhost:8983/solr/gettingstarted/query' -d '{
 "query":"_text_:solr",
 "filter":"content_type:text/html"
}'
</pre>
<h2>Co dalej?</h2>
<p>Jak widać, JSON API w Solr jest bardzo przyjemne i proste w wykorzystaniu pozwalając nam na definiowanie zapytań z pewną strukturą. W następnym wpisie postaramy się przybliżyć kolejną możliwość JSON API, czyli faceting. Postaramy się pokazać różnice pomiędzy starą implementacją obecną w Solr już od bardzo dawna, a nową, wprowadzoną stosunkowo niedawno.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2015/12/21/solr-5-json-api-czesc-pierwsza/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Solr 3.1: JSON Update Handler</title>
		<link>https://solr.pl/2011/04/18/solr-3-1-json-update-handler/</link>
					<comments>https://solr.pl/2011/04/18/solr-3-1-json-update-handler/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 18 Apr 2011 17:41:16 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[file format]]></category>
		<category><![CDATA[handler]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[update]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=234</guid>

					<description><![CDATA[W związku z pojawieniem się Solr 3.1 postanowiłem przyjrzeć się funkcjonalności rozszerzającej listę formatów za pomocą których możemy uaktualniać indeksy. Do tej pory mieliśmy do wyboru trzy rodzaje formatów za pomocą których mogliśmy dostarczać dane &#8211; XML, CSV oraz tzw.]]></description>
										<content:encoded><![CDATA[<p>W związku z pojawieniem się <a href="http://solr.pl/2011/03/31/lucene-i-solr-3-1/" target="_blank" rel="noopener noreferrer">Solr 3.1</a> postanowiłem przyjrzeć się funkcjonalności rozszerzającej listę formatów za pomocą których możemy uaktualniać indeksy. Do tej pory mieliśmy do wyboru trzy rodzaje formatów za pomocą których mogliśmy dostarczać dane &#8211; XML,  CSV oraz tzw. JavaBin. Wraz z pojawieniem się Solr 3.1 wprowadzono czwarty format &#8211; JSON.</p>
<p><span id="more-234"></span></p>
<h3>Kilka słów na początek</h3>
<p><em>JsonUpdateRequestHandler</em>, bo tak nazywa się nowy handler, pozwala na przesyłanie danych w formacie JSON`a, co teoretycznie powinno przełożyć się na mniejszą ilość danych przesyłanych przez sieć oraz na zwiększoną szybkość indeksowania, jako, że parser JSON`a jest teoretycznie szybszy, niż parsery XML. Jednak wydajność zostawmy sobie na koniec.</p>
<h3>Konfiguracja</h3>
<p>Zacznijmy od zdefiniowania handlera w celu jego wykorzystania. Aby to zrobić należy do pliku <em>solrconfig.xml</em> dodać następujący wpis (jeżeli korzystacie z domyślnego pliku <em>solrconfig.xml</em> dołączonego do Solr 3.1 ten handler jest już zdefiniowany):
</p>
<pre class="brush:xml">&lt;requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler" startup="lazy" /&gt;</pre>
<p>Powyższy wpis definiuje nowy handler ładowany przy pierwszym odwołaniu do niego (<em>startup=&#8221;lazy&#8221;</em>).</p>
<h3>Indeksowanie</h3>
<p>Kolejny krok to przygotowanie danych do zaindeksowania &#8211; oczywiście w formacie JSON. Poniżej przykład pokazujący dwa dokumenty w jednym pliku nazwanym <em>dane.json</em>:
</p>
<pre class="brush:plain">{

"add": {
  "doc": {
    "id" : "123456788",
    "region" : ["abc","def"],
    "name" : "ABCDEF",
  }
}

,
"add": {
  "doc": {
    "id" : "123456789",
    "region" : ["abc","def"],
    "name" : "XYZMN",
  }
}

}</pre>
<p>Tak przygotowany plik możemy wysłać na adres <em>/update/json</em> i tym samym zaindeksować. Należy pamiętać o wysłaniu polecenia <em>commit</em> pod odpowiedni adres (standardowo <em>/update</em>) w celu zapisania zmian w indeksie.</p>
<h3>Kilka słów o wydajności</h3>
<p>Na sam koniec zostawiłem sobie to, co mnie tak naprawdę najbardziej interesuje &#8211; wydajność nowego handlera. Zgodnie z informacjami zapisanymi w systemie JIRA można się spodziewać, iż <em>JsonUpdateRequestHandler </em>będzie szybszy od swojego odpowiednika przetwarzającego pliki w formacie XML. Żeby to sprawdzić, przygotowałem pliki o wielkości 10.000, 100.000 oraz 1.000.000 dokumentów, które zawierały identyfikator (pole typu <em>String</em>), dwa regiony (pole typu <em>String</em>, wielowartościowe) oraz nazwę (pole typu <em>Text</em>). Jeden plik został zapisany analogicznie do pokazanego wcześniej przykładu formatu JSON, drugi plik został zapisany w formacie XML, trzeci został zapisany w formacie CSV. Wszystkie pliki były następnie indeksowane. Poniżej przedstawiam wynik tego prostego testu:</p>
[table “9” not found /]<br />

<p>Wnioski nasuwają się same. Po pierwsze plik XML z danymi jest stosunkowo większy od tego, który zapisany został w formacie JSON`a (różnica to około 35%). Natomiast plik zapisany w formacie JSON jest jednak większy (czego należało się spodziewać) od tego, który zapisujemy w CSV. Jeżeli przesyłamy dane nie w sieci lokalnej, to wielkość ta ma znaczenie &#8211;  różnica w wielkości jest na tyle znacząca, iż warto się zastanowić nad zmianą z XML do któregoś z formatów wymagających mniej miejsca na dysku.</p>
<h3>Czas indeksacji</h3>
<p>Kolejna sprawa, to czas indeksowania. Podpierając się wynikami tego prostego testu można stwierdzić, iż <em>JsonUpdateRequestHandler</em> jest nieznacznie (około 7 &#8211; 9%) szybszy od <em>XmlUpdateRequestHandler</em>`a. Jak widać, podobna różnica jest w przypadku <em>JsonUpdateRequestHandler</em> oraz <em>CSVRequestHandler</em>, gdzie handler operujący na plikach w  formacie CSV jest szybszy od swojego odpowiednika operującego na  formacie JSON o około 7 do 9%. Miejmy nadzieję, iż kiedy kiedy biblioteka <a href="http://labs.apache.org/labs.html" target="_blank" rel="noopener noreferrer">noggit</a> wyjdzie z <em>Apache Labs</em> jej wydajność będzie jeszcze większa, a tym samym <em>JsonUpdateRequestHandler</em> będzie jeszcze szybszy.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2011/04/18/solr-3-1-json-update-handler/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
