<?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>query parser &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/query-parser-2/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 13:56:38 +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 i dostępne query parsery</title>
		<link>https://solr.pl/2013/08/19/solr-i-dostepne-query-parsery/</link>
					<comments>https://solr.pl/2013/08/19/solr-i-dostepne-query-parsery/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 19 Aug 2013 12:56:10 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[parser]]></category>
		<category><![CDATA[query parser]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=568</guid>

					<description><![CDATA[Wiele osób nie zdaje sobie sprawy, jak dużo różnych query parserów dostępny jest w Solr. W dzisiejszym wpisie chciałbym przybliżyć wszystkim czytelnikom listę dostępnych parserów i krótko wspomnieć co każdy z nich oferuje. Zacznijmy od listy Korzystając z parameteru defType]]></description>
										<content:encoded><![CDATA[<p>Wiele osób nie zdaje sobie sprawy, jak dużo różnych query parserów dostępny jest w Solr. W dzisiejszym wpisie chciałbym przybliżyć wszystkim czytelnikom listę dostępnych parserów i krótko wspomnieć co każdy z nich oferuje.</p>
<p><span id="more-568"></span></p>
<h3>Zacznijmy od listy</h3>
<p>Korzystając z parameteru <em>defType</em> w trakcie zapytania jesteśmy w stanie określić, który query parser zostanie wykorzystany w trakcie przetwarzania naszego zapytania. Lista dostępnych query parserów w Solr 4.4 przedstawia się następująco:</p>
<ul>
<li>lucene</li>
<li>lucenePlusSort</li>
<li>func</li>
<li>prefix</li>
<li>boost</li>
<li>dismax</li>
<li>edismax</li>
<li>field</li>
<li>raw</li>
<li>term</li>
<li>query</li>
<li>frange</li>
<li>geofilt</li>
<li>bbox</li>
<li>join</li>
<li>surround</li>
<li>switch</li>
<li>maxscore</li>
</ul>
<p>Przejdźmy zatem do ich opisu.</p>
<h3>Lucene Query Parser &#8211; lucene</h3>
<p>Domyślny parser wykorzystywany przez Solr umożliwiający zadawanie zapytań z wykorzystaniem języka zapytań Lucene (z pewnymi, małymi zmianami o których można przeczytać tutaj: <a href="http://wiki.apache.org/solr/SolrQuerySyntax" target="_blank" rel="noopener noreferrer">http://wiki.apache.org/solr/SolrQuerySyntax</a>). Przykładowe zapytanie z wykorzystaniem tego parsera wygląda następująco: <em>q=+title:harry +category:books</em></p>
<h3>Old Lucene Query Parser &#8211; lucenePlusSort</h3>
<p>Stary parser Lucene, który wydaje się być bardzo rzadko wykorzystywany. Wyróżniał się tym, iż pozwalał na określenie sortowania w samym zapytaniu (metoda ta oznaczona jest jako <em>deprecated</em>). Zapytanie takie wyglądało następująco: <em>q={!lucenePlusSort}title:harry;price asc</em></p>
<h3>Function Query Parser &#8211; func</h3>
<p>Parser umożliwiający wykorzystanie funkcji (<a href="http://wiki.apache.org/solr/FunctionQuery">http://wiki.apache.org/solr/FunctionQuery</a>) w zapytaniu. Na przykład, można go wykorzystać do wykonywania obliczeń na etapie zapytań: <em>q={!func}add($value1,$value2)&amp;value1=max(price,100)&amp;value2=1.0</em>.</p>
<h3>Prefix Query Parser &#8211; prefix</h3>
<p>Jeden z parserów, którego nie interesuje typ pola &#8211; wartości do niego podane nie będą poddane analizie. Sam parser służy do wykonywania zapytań z wykorzystaniem przedrostków, na przykład zapytanie, takie jak <em>q={!prefix}har</em> jest prawie tym samym co zapytanie <em>q=har*</em> wykorzystujący domyślny Lucene query parser.</p>
<h3>Boost Query Parser &#8211; boost</h3>
<p>Parser umożliwiający tworzenie zapytań modyfikujących wartości <em>score</em> dokumentów. Na przykład, jeżeli chcemy, aby <em>score</em> dokumentów zwracanych w odpowiedzi na zapytanie <em>harry</em> były zmodyfikowane zapytaniem <em>recip(ms(NOW,published),3.16e-11,1,1)</em>, możemy zadać następujące zapytanie: <em>{!boost b=recip(ms(NOW,published),3.16e-11,1,1)}harry</em>.</p>
<h3>Dismax Query Parser &#8211; dismax</h3>
<p>Parser obsługujący uproszczoną wersję języka zapytań Lucene (np. nie ma możliwości przekazania nazwy pola w zapytaniu), który na wyjściu tworzy tzw. zapytania disjunction max (wiem, wiem, dziwnie to brzmi) stworzone z przekazanego zapytania oraz pól zdefiniowanych w parametrze <em>qf</em>. Pozwala na definiowanie liczby słów, jakie muszą być znalezione w dokumencie (za pomocą parametru <em>mm</em>) oraz definicji, jak powinny być traktowane poszczególne elementy wpływające na finalny <em>score</em> dokumentu (parametr <em>tie</em>). Wszystkie parametery udostępnianie przez ten parser oraz jego opis można znaleźć na wiki Solr, pod adresem: <a href="http://wiki.apache.org/solr/DisMaxQParserPlugin">http://wiki.apache.org/solr/DisMaxQParserPlugin</a>.</p>
<h3>Extended Dismax Query Parser &#8211; edismax</h3>
<p>Rozszerzona wersja parsera <em>dismax</em>, umożliwiająca między innymi podawanie nazw pól w głównym zapytaniu. Parser ten, został zaprojektowany z myślą o możliwości podawania bardziej skomplikowanych zapytań, niż te, które można było przekazać za pomocą parametru <em>q</em> w przypadku parsera <em>dismax</em>. Wszystkie parametry i dokładniejszy opis parsera można znaleźć na wiki Solr pod adresem: <a href="http://wiki.apache.org/solr/ExtendedDisMax">http://wiki.apache.org/solr/ExtendedDisMax</a>.</p>
<h3>Field Query Parser &#8211; field</h3>
<p>Field query parser umożliwia nam wykonywanie zapytań przeciwko danemu polu. Przekazana do parsera wartość zostanie poddana analizie oraz zostanie stworzone zapytanie o frazę, jeżeli jest taka możliwość. Na przykład, zapytanie postaci <em>{!field f=title}harry potter </em>jest mniej, więcej odpowiednikiem zapytania <em>title:&#8221;harry potter&#8221;</em> w przypadku korzystania z domyślnego Lucene query parsera.</p>
<h3>Raw Query Parser &#8211; raw</h3>
<p>Parser umożliwiający przekazanie terma, który nie zostanie poddany analizie przez Solr. Na przykład zapytanie <em>{!raw f=title}harry</em> zaowocuje stworzeniem <em>TermQuery</em> do pola <em>title</em>&nbsp; z wartością <em>harry</em>.</p>
<h3>Term Query Parser &#8211; term</h3>
<p>Parser przydatny do zadawania zapytań, które powinny zostać potraktowane jako filtry, np. w przypadku zawężania facetingu &#8211; <em>{!term f=category}book</em>. Należy pamiętać, iż wartość przekazana do tego parsera nie zostanie poddana analizie.</p>
<h3>Nested Query Parser &#8211; query</h3>
<p>Parser umożliwiający przekazanie podzapytania, z możliwością zmiany typu podzapytania. Na przykład weźmy następujące zapytanie <em>{!query defType=func v=$query}&amp;$query=max(price,100) </em>będzie ono skutkować wywołaniem zapytania z wykorzystaniem funkcji zdefiniowanego w parametrze <em>query</em>. Jeżeli natomiast zmienimy parametr <em>query</em> na następujący: <em>$query={!term f=category}book</em>, wtedy zostanie wykonane zapytanie z wykorzystaniem term query parsera, a zatem parametr <em>defType</em> zostanie nadpisany. Nested query parser jest użyteczny na przykład w sytuacji, kiedy chcemy umożliwić użytkownikom wykorzystanie wartości zapisanych w parametrach konfiguracyjnych.</p>
<h3>Function Range Query Parser &#8211; frange</h3>
<p>Parser umożliwiający zadanie zapytanie o zakres wartości wyniku działania funkcji (pisaliśmy o tym &#8211; <a title="Krótkie spojrzenie: frange" href="http://solr.pl/2011/05/30/krotkie-spojrzenie-frange/">http://solr.pl/2011/05/30/krotkie-spojrzenie-frange/</a>). Parser umożliwia wykorzystanie czterech parametrów: <em>l</em>, <em>u</em>, <em>incl</em>, <em>incu</em> które pozwalają na konfigurowanie jego zachowania. Przykładowe zapytanie z wykorzystaniem tego parsera może wyglądać następująco: <em>{!frange l=10 u=12 incl=true incu=true}sum(price,rate)</em>.</p>
<h3>Spatial Filter Query Parser &#8211; geofilt</h3>
<p>Jeden z dwóch parserów umożliwiających zawężanie dokumentów na podstawie ich lokalizacji oraz odległości od podanego punktu geograficznego. Na przykład zapytanie <em>q=*:*&amp;fq={!geofilt pt=52.14,21.10 sfield=location d=50}</em> zwróci nam dokumenty, które zawierają się w odległości 50km od podanego punktu. Więcej o tym parserze można przeczytać na wiki Solr pod adresem: <a href="http://wiki.apache.org/solr/SpatialSearch#geofilt_-_The_distance_filter">http://wiki.apache.org/solr/SpatialSearch#geofilt_-_The_distance_filter</a>.</p>
<h3>Spatial Box Query Parser &#8211; bbox</h3>
<p>Kolejny query parser umożliwiający zawężanie dokumentów na podstawie ich lokalizacji. W odróżnieniu od parsera <em>geofilt</em> parser <em>bbox</em> jest mniej wymagający pod względem mocy obliczeniowej, aczkolwiek może zwrócić dokument, który będzie znajdował się poza dokładnie zdefiniowanym okręgiem (ze względu na przybliżenia obliczeń). Przykładowe zapytanie wykorzystujące ten parser może wyglądać następująco: <em>q=*:*&amp;fq={!bbox pt=52.14,21.10 sfield=location d=50}</em>.&nbsp;Więcej o tym parserze można przeczytać na wiki Solr pod adresem <a href="http://wiki.apache.org/solr/SpatialSearch#bbox_-_Bounding-box_filter">http://wiki.apache.org/solr/SpatialSearch#bbox_-_Bounding-box_filter</a>.</p>
<h3>Join Query Parser &#8211; join</h3>
<p>Parser umożliwiający tworzenie zapytań o dokumenty, które są zależne od innych dokumentów, czyli z wykorzystaniem joinów. Możliwe są połączenia zarówno w ramach pojedynczego rdzenia, jak i różnych rdzeni. Przykładowe zapytanie może wyglądać następująco: <em>q={!join from=parent to=id}color:Yellow</em>. Więcej przykładów oraz trochę dokładniejszy opis można znaleźć wśród wcześniejszych artykułów, np. tutaj: <a title="Czekając na 4.0: Solr-2272, czyli Solr i funkcjonlaność Join" href="http://solr.pl/2011/02/21/czekajac-na-4-0-solr-2272-czyli-solr-i-funkcjonlanosc-join/">http://solr.pl/2011/02/21/czekajac-na-4-0-solr-2272-czyli-solr-i-funkcjonlanosc-join/</a>.</p>
<h3>Surround Query Parser &#8211; surround</h3>
<p>Parser, który jest dostępny w ramach dodatkowych bibliotek do Solr (można o nim przeczytać więcej na: <a href="http://wiki.apache.org/solr/SurroundQueryParser">http://wiki.apache.org/solr/SurroundQueryParser)</a>. Postaramy się w nabliższych tygodniach napisać o nim więcej &#8211; generalne pozwala na wyszukiwanie informacji z uwzględnieniem pozycji.</p>
<h3>Switch Query Parser &#8211; switch</h3>
<p>Idea działania tego parsera jest dość prosta &#8211; umożliwić przetwarzanie prostego warunku po stronie Solr i przekazanie go jako podzapytania. Przykład wykorzystania oraz więcej o tym parserze można znaleźć tutaj: <a title="Switch query parser – szybkie spojrzenie" href="http://solr.pl/2013/06/03/switch-query-parser-szybkie-spojrzenie/">http://solr.pl/2013/06/03/switch-query-parser-szybkie-spojrzenie/</a>.</p>
<h3>Max Score Query Parser &#8211; maxscore</h3>
<p>Bardzo podobny (jeżeli chodzi o parametry) parser do domyślnego Lucene query parsera. Różnica w działaniu polega na wyliczaniu <em>score</em> dokumentów. W przypadku max score query parsera, dokumenty otrzymują <em>score</em> równy najbardziej znaczącemu elementowi w zapytaniu. Dodatkowo, mamy możliwość zmiany tego zachowania poprzez przekazanie parametru <em>tie</em> (domyślnie <em>0.0</em>). W przypadku przekazania <em>tie=0.0</em>, dokument otrzyma <em>score</em>, taki jak najbardziej znaczący element zapytania, jeżeli przekażemy <em>tie=1.0</em>, to <em>score</em> dokumentu będzie sumą wszystkich elementów wpływających na&nbsp;<em>score</em>. Przykładowe zapytanie może wyglądać następująco: <em>q=potter {!maxscore v=&#8217;harry&#8217;}</em>.&nbsp;<em></em>Więcej o parametrze <em>tie</em> można przeczytać tutaj: <a title="Do czego może przydać się tie w Dismax’ie ?" href="http://solr.pl/2012/02/06/do-czego-moze-przydac-sie-tie-w-dismaxie/">http://solr.pl/2012/02/06/do-czego-moze-przydac-sie-tie-w-dismaxie/</a>.</p>
<h3>Krótkie podsumowanie</h3>
<p>Jak widać, Solr dostarcza nam naprawdę różnorodne i ciekawe parsery zapytań do wykorzystania. Za ich pomocą możemy stworzyć skomplikowane zapytania, które wykorzystają dużą część funkcjonalności Lucene. Należy jednak pamiętać, że im bardziej skomplikowane zapytanie, tym więcej mocy obliczeniowej będzie potrzebować Solr, aby je wykonać &#8211; warto o tym pamiętać przy konstrukcji tych bardziej skomplikowanych.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2013/08/19/solr-i-dostepne-query-parsery/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
