<?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>currencyfield &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/currencyfield/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 22:27:10 +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 3.6: CurrencyField</title>
		<link>https://solr.pl/2012/03/19/solr-3-6-currencyfield/</link>
					<comments>https://solr.pl/2012/03/19/solr-3-6-currencyfield/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 19 Mar 2012 22:26:31 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[currency]]></category>
		<category><![CDATA[currencyfield]]></category>
		<category><![CDATA[field]]></category>
		<category><![CDATA[pole]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[solr 3.6]]></category>
		<category><![CDATA[waluta]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=406</guid>

					<description><![CDATA[Solr 3.6 przyniesie ciekawą funkcjonalność w postaci obsługi walut. Ktoś mógłby zapytać: &#8222;Po co ? Przecież wystarczy typ zmiennoprzecinkowy i mamy obsługę walut&#8221;. Przyjrzyjmy się zatem co da nam solr.CurrencyField w Solr 3.6. Konfiguracja Zacznijmy od konfiguracji komponentu, która jest]]></description>
										<content:encoded><![CDATA[<p>Solr 3.6 przyniesie ciekawą funkcjonalność w postaci obsługi walut. Ktoś mógłby zapytać: &#8222;Po co ? Przecież wystarczy typ zmiennoprzecinkowy i mamy obsługę walut&#8221;. Przyjrzyjmy się zatem co da nam <em>solr.CurrencyField</em> w Solr 3.6.</p>
<p><span id="more-406"></span></p>
<h3>Konfiguracja</h3>
<p>Zacznijmy od konfiguracji komponentu, która jest standardowa jeżeli chodzi o Solr. Do pliku <em>schema.xml</em> dodajemy po prostu kolejny wpis, np. w takiej postaci:
</p>
<pre class="brush:xml">&lt;fieldType class="solr.CurrencyField" name="currencyField" defaultCurrency="USD" currencyConfig="currencyExchange.xml" /&gt;</pre>
<p>W powyższej konfiguracji typu pojawiają się dwa dodatkowe atrybutu, które określają zachowanie pól typu <em>currencyField</em>. Po pierwsze to parametr <em>defaultCurrency</em>, który określa domyślną walutę dla pola. Raz zdefiniowany określa w jakiej formie dane będą zapisywane w indeksie (zmiana wartości wymaga reindeksacji danych). Drugi atrybut, <em>currencyConfig</em> określa plik z kursami wymiany pomiędzy walutami. Warto pamiętać, iż parametr ten ma sens tylko dla domyślnego providera wymiany (<em>FileExchangeRateProvider</em>) dostarczanego z Solr. Przyjrzyjmy się zatem plikowi <em>currencyExchange.xml</em>:</p>
<h3>Plik definicji wymiany walut dla FileExchangeRateProvider</h3>
<p>Poniżej przedstawiam zawartość pliku <em>currencyExchange.xml</em> zawierającego przykładowe przeliczniki kursów walut dla domyślnego providera wymiany dostarczanego razem z Solr.
</p>
<pre class="brush:xml">&lt;currencyConfig version="1.0"&gt;
 &lt;rates&gt;
  &lt;rate from="USD" to="PLN" rate="3.1"/&gt;
  &lt;rate from="EUR" to="PLN" rate="2.5"/&gt;
  &lt;rate from="USD" to="EUR" rate="2.5"/&gt;
 &lt;/rates&gt;
&lt;/currencyConfig&gt;</pre>
<p>Jak widać plik ma dość prostą strukturę, podajemy walutę wejściową (<em>from</em>), walutę wyjściową (<em>to</em>) oraz przelicznik (<em>rate</em>). Nic prostszego <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>
<h3>Indeksowanie danych</h3>
<p>Aby poprawnie zaindeksować dane zawierając nasz zdefiniowany typ <em>currencyField</em> należy podać wartość, a następnie symbol waluty oddzielony przecinkiem. Na przykład:
</p>
<pre class="brush:xml">&lt;field name="price"&gt;21.99,EUR&lt;/field&gt;</pre>
<h3>Zadawanie zapytań</h3>
<p>Zadawanie zapytań wygląda analogicznie do indeksowania. Oprócz samej informacji o wartościach musimy także przekazać informację o walucie na jakiej Solr ma dokonywać operacji. Poniżej przykłady wykorzystujące filtrowanie po wartości oraz przedziale wartości:
</p>
<pre class="brush:xml">fq=price:29.99,PLN</pre>
<pre class="brush:xml">fq=price:[10.00 TO 29.99,EUR]</pre>
<p>Jak widać, po podaniu interesujących nas wartości dodajemy przecinek, a następnie podajemy oznaczenie waluty. Co więcej, możemy skorzystać z walut zdefiniowanych wcześniej w pliku wymiany. Oznacza to, że Solr może za nas dokonać automatycznej zamiany <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;" /> Pomimo możliwości automatycznej zmiany wyszukiwanej waluty wyniki zwracane są zawsze w tej zdefiniowanej jako domyślna i na razie nie ma możliwości zmiany tego zachowania.</p>
<h3>Własny provider wymiany walut</h3>
<p>Solr, oprócz domyślnego provider&#8217;a wymiany walut, umożliwia napisanie własnego. Aby to zrobić musimy stworzyć klasę implementującą interfejs <em>org.apache.solr.schema.ExchangeRateProvider</em> oraz podać naszą klasę w jako wartość atrybutu <em>providerClass</em> dla zdefiniowanego typu. Zakładając, iż mamy klasę <em>pl.solr.schema.DynamicRateExchangeProvider</em> implementującą w/w interfejs i chcemy z niej skorzystać, definicja typu mogłaby wyglądać następująco:
</p>
<pre class="brush:xml">&lt;fieldType class="solr.CurrencyField" name="currencyField" defaultCurrency="USD" providerClass="pl.solr.schema.DynamicRateExchangeProvider" /&gt;</pre>
<p>Osobiście bardzo podoba mi się ta możliwość, ponieważ zyskujemy możliwość dynamicznego pobierania kursów wymiany np. poprzez webservice.</p>
<h3>Co zostało do implementacji</h3>
<p>W chwili pisania i publikacji tego wpisu, pola typu <em>CurrencyField</em> nie są obsługiwane w przypadku facetingu po zakresach.</p>
<h3>Podsumowanie</h3>
<p>Moim zdaniem <em>CurrencyField</em> jest całkiem ciekawą funkcjonalnością uwalniającą nas od przeliczania waluty po stronie aplikacji. Zamiast tego, w Solr 3.6, otrzymamy narzędzie, które umożliwi nam wyszukiwanie z automatycznym przeliczaniem waluty po stronie Solr. Dodatkowo, jeżeli pokusimy się o implementację własnego mechanizmu dostarczania przeliczników wymiany możemy otrzymać całkiem fajny w użyciu mechanizm, który sam pobierze waluty z odpowiadającego nam źródła, sam będzie je dynamiczne przeliczał, a nam zostanie tylko zadawanie zapytań <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/2012/03/19/solr-3-6-currencyfield/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
