<?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>switch &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/switch/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>Thu, 12 Nov 2020 11:13:00 +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>Switch query parser &#8211; szybkie spojrzenie</title>
		<link>https://solr.pl/2013/06/03/switch-query-parser-szybkie-spojrzenie/</link>
					<comments>https://solr.pl/2013/06/03/switch-query-parser-szybkie-spojrzenie/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 03 Jun 2013 10:12:33 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[parser]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[query praser]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[switch]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=513</guid>

					<description><![CDATA[Ilość dostępnych query parserów w Solr zawsze mnie zadziwiała. Czy jest tu ktoś kto jest w stanie wymienić je wszystkie? Jednak w dzisiejszym wpisie nie będziemy się przyglądać wszystkim parserom, ale jednemu konkretnemu o nazwie SwitchQueryParser wprowadzonemu w Solr 4.2.]]></description>
										<content:encoded><![CDATA[<p>Ilość dostępnych query parserów w Solr zawsze mnie zadziwiała. Czy jest tu ktoś kto jest w stanie wymienić je wszystkie? Jednak w dzisiejszym wpisie nie będziemy się przyglądać wszystkim parserom, ale jednemu konkretnemu o nazwie <em>SwitchQueryParser</em> wprowadzonemu w Solr 4.2.</p>
<p><span id="more-513"></span></p>
<h3>Idea działania</h3>
<p>Idea działania jest dość prosta &#8211; umożliwić przetwarzanie prostego warunku po stronie Solr i przekazanie do jako podzapytanie. Na przykład, wyobraźmy sobie, że mamy aplikację, która rozumie cztery wartości pola <em>priceRange</em>:</p>
<ul>
<li><em>cheap</em> &#8211; w przypadku kiedy cena produktu, zapisana w polu <em>price</em>, jest niższa, niż 10$,</li>
<li><em>average</em> &#8211; w przypadku kiedy cena produktu jest pomiędzy 10, a 30$,</li>
<li><em>expensive</em> &#8211; w przypadku kiedy cena produktu jest wyższa niż 30$,</li>
<li><em>all</em> &#8211; w przypadku kiedy chcemy pokazać wszystkie produkty, bez względu na cenę</li>
</ul>
<p>Chcielibyśmy tę logikę zaszyć w Solr, aby nie było konieczności zmian po stronie aplikacji za każdym razem kiedy chcemy zmienić powyższe warunki. W tym właśnie celu wykorzystamy <em>SwitchQueryParser</em>.</p>
<h3>Nasze zapytanie</h3>
<p>Załóżmy, że nasza aplikacja jest w stanie zadać następujące zapytanie:
</p>
<pre class="brush:bash">http://localhost:8983/solr/collection1/price?q=*:*&amp;priceRange=cheap</pre>
<p>A zatem chcielibyśmy, aby na powyższe zapytanie Solr zwrócił wszystkie dokumenty (<em>q=*:*</em>), ale zawężone do tych posiadających cenę niższą niż 10$ (parameter <em>priceRange=cheap</em>).</p>
<h3>Konfiguracja Solr</h3>
<p>Oczywiście nie chcemy konfiguracji naszych zakresów pola <em>price</em> wysyłać w zapytaniu, bo nie miałoby to większego sensu. My zdecydowaliśmy się stworzyć nowy SearchHandler o nazwie /<em>price</em> z następującą konfiguracją (dodajemy go do pliku <em>solrconfig.xml</em>):
</p>
<pre class="brush:xml">&lt;requestHandler name="/price"&gt;
 &lt;lst name="defaults"&gt;
  &lt;str name="priceRange"&gt;all&lt;/str&gt;
 &lt;/lst&gt;
 &lt;lst name="appends"&gt;
  &lt;str name="fq"&gt;{!switch case.all='price:[* TO *]' case.cheap='price:[0 TO 10]' case.average='price:[10 TO 30]' case.expensive='price:[30 TO *]' v=$priceRange}&lt;/str&gt;
 &lt;/lst&gt;
&lt;/requestHandler&gt;</pre>
<p>Jak widać konfiguracja naszego SearchHandlera składa się z dwóch elementów. Po pierwsze w sekcji <em>defaults</em> zdefiniowaliśmy, iż parametr <em>priceRange</em> będzie domyślnie przyjmować wartość <em>all</em>. Dodatkowo zdefiniowaliśmy filtr&nbsp;(<em>fq</em>) działający w oparciu o <em>SwitchQueryParser</em> (<em>!switch</em>). Dla każdej z możliwych wartości parametru <em>priceRange</em> (<em>v=$priceRange</em>) zdefiniowaliśmy odpowiedni filtr wykorzystując wyrażenie <em>case.wartośćPolaPriceRange=filtr</em>. Zatem, kiedy wartość parametru <em>priceRange</em> w zapytaniu będzie wynosić <strong><em>cheap</em></strong> to filtr zdefiniowany przez <em>case.<strong>cheap</strong></em> będzie wykorzystany, jeżeli ta wartość będzie wynosić&nbsp;<strong>expensive</strong> to filtr zdefiniowany przez&nbsp;<em>case.<strong>expensive</strong></em> będzie wykorzystany, itd.</p>
<h3>O czym należy pamiętać</h3>
<p>Jest jedna, ważna rzecz o której należy pamiętać w przypadku korzystania z opisywanego parsera. W naszym przypadku podanie do parametru <em>priceRange</em> wartości innej, niż 4 powyżej wymienione będzie skutkowało błędem Solr.</p>
<h3>Kilka słów podsumowania</h3>
<p>Moim skromnym zdaniem <em>SwitchQueryParser</em> pomimo tego, że nie będzie stosowany przez większość użytkowników Solr wydaje się być fajnym pomysłem. Biorąc pod uwagę to, że pozwala ukryć przed aplikacją bardzo prostą logikę oraz to, że jest dość prosty, a co za tym nie wymagający jeżeli chodzi o zasoby, na pewno znajdą się użytkownicy, którym ten parser ułatwi pracę <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/2013/06/03/switch-query-parser-szybkie-spojrzenie/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
