<?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>wyszukiwanie &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/wyszukiwanie/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:24:42 +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>Prosta wyszukiwarka zdjęć</title>
		<link>https://solr.pl/2012/02/20/prosta-wyszukiwarka-zdjec/</link>
					<comments>https://solr.pl/2012/02/20/prosta-wyszukiwarka-zdjec/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 20 Feb 2012 22:24:17 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[exif]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[tika]]></category>
		<category><![CDATA[wyszukiwanie]]></category>
		<category><![CDATA[zdjęcia]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=400</guid>

					<description><![CDATA[Mieliśmy niedawno okazję pomocy przy tworzeniu niekomercyjnego projektu, którego częścią była wyszukiwarka. Jednym z założeń, trochę pobocznych, było wyszukiwanie zdjęć, aby korzystający mogli bardzo szybko dotrzeć do interesujących ich obrazów. Wyszukiwarka miała działać w oparciu o meta dane zapisane w]]></description>
										<content:encoded><![CDATA[<p>Mieliśmy niedawno okazję pomocy przy tworzeniu niekomercyjnego projektu, którego częścią była wyszukiwarka. Jednym z założeń, trochę pobocznych, było wyszukiwanie zdjęć, aby korzystający mogli bardzo szybko dotrzeć do interesujących ich obrazów. Wyszukiwarka miała działać w oparciu o meta dane zapisane w plikach JPEG, tak więc wybór był jasny &#8211; Apache Solr oraz Apache Tika.</p>
<p><span id="more-400"></span></p>
<h3>Założenia</h3>
<p>Założenia projektu były dość proste &#8211; aplikacja korzystająca z Solr miała móc wyszukiwać zdjęcia po tytule, autorze i innych danych zawartych w EXIF, takich jak przesłona, czas naświetlania, ogniskowa czy wartość ISO. Kolejnym założeniem było to, iż to Solr musi sobie poradzić z wyodrębnieniem tych danych z plików, które dostaje do indeksowania. To tyle jeżeli chodzi o założenia dotyczące wyszukiwania zdjęć.</p>
<h3>Struktura indeksu</h3>
<p>Struktura indeksu była bardzo prosta i zawierała jedynie najbardziej niezbędne pola. Sama definicja pól wygląda następująco:
</p>
<pre class="brush:xml">&lt;field name="id" type="string" indexed="true" stored="true" required="true" /&gt;
&lt;field name="name" type="text" indexed="true" stored="true" /&gt;
&lt;field name="author" type="text" indexed="true" stored="true" /&gt;
&lt;field name="iso" type="text" indexed="true" stored="true" multiValued="true" /&gt;
&lt;field name="iso_string" type="text" indexed="true" stored="true" multiValued="true" /&gt;
&lt;field name="aperture" type="double" indexed="true" stored="true" /&gt;
&lt;field name="exposure" type="string" indexed="true" stored="true" /&gt;
&lt;field name="exposure_time" type="double" indexed="true" stored="true" /&gt;
&lt;field name="focal" type="string" indexed="true" stored="true" /&gt;
&lt;field name="focal_35" type="string" indexed="true" stored="true" /&gt;
&lt;dynamicField name="ignored_*" type="string" indexed="false" stored="false" multiValued="true" /&gt;</pre>
<p>Pole dynamiczne zostało wprowadzone po to, aby umożliwić ignorowanie danych, które nas nie interesują. Dodatkowo, obecny był <em>copyField</em> kopiujący wartość z pola <em>iso</em> do pola <em>iso_string</em>.</p>
<h3>Konfiguracja Solr</h3>
<p>Poniżej przedstawiona została konfiguracja handlera w pliku solrconfig.xml:
</p>
<pre class="brush:xml">&lt;requestHandler name="/update/extract" class="solr.extraction.ExtractingRequestHandler"&gt;
 &lt;lst name="defaults"&gt;
  &lt;str name="uprefix"&gt;ignored_&lt;/str&gt;
  &lt;str name="lowernames"&gt;true&lt;/str&gt;
  &lt;str name="captureAttr"&gt;true&lt;/str&gt;
  &lt;str name="fmap.stream_name"&gt;name&lt;/str&gt;
  &lt;str name="fmap.artist"&gt;author&lt;/str&gt;
  &lt;str name="fmap.exif_isospeedratings"&gt;iso&lt;/str&gt;
  &lt;str name="fmap.exif_fnumber"&gt;aperture&lt;/str&gt;
  &lt;str name="fmap.exposure_time"&gt;exposure&lt;/str&gt;
  &lt;str name="fmap.exif_exposuretime"&gt;exposure_time&lt;/str&gt;
  &lt;str name="fmap.focal_length"&gt;focal&lt;/str&gt;
  &lt;str name="fmap.focal_length_35"&gt;focal_35&lt;/str&gt;
 &lt;/lst&gt;
&lt;/requestHandler&gt;</pre>
<p>Kilka słów wyjaśnienia konfiguracji. Parametr <em>uprefix</em> mówi o tym, jaki przedrostek nadać nazwom pól, które nie zostały wymienione w konfiguracji. W przypadku powyższej konfiguracji nazwy pól, które nie zostały wymienione zostaną poprzedzone słowem <em>ignored_</em>. Oznacza, to, że trafią do pola dynamicznego (patrz struktura indeksu) i nie zostaną zaindeksowane (<em>stored=&#8221;false&#8221;</em> oraz <em>indexed=&#8221;false&#8221;</em>). Parametr <em>lowername</em>s z wartością <em>true</em> powoduje sprowadzanie nazw pól do małych liter. Parametr <em>captureAttr </em>mówi natomiast o tym, iż mają być pobierane atrybuty pliku. Następne parametry to mapowanie pól zwracanych przez bibliotekę Tika do pól w indeksie. Np. parametr <em>fmap.exif_fnumber</em> o wartości <em>aperture</em> mówi o tym, żeby dane z atrybutu <em>exif_fnumber</em> zostały zapisane w polu <em>aperture</em> w indeksie.</p>
<h4>Dodatkowe, potrzebne biblioteki</h4>
<p>Aby powyższa zmiana zaczęła działać potrzebujemy jeszcze dodatkowych bibliotek (podobnie, jak w przypadku <a href="http://solr.pl/2012/01/23/identyfikacja-jezyka-dokumentu/" target="_blank" rel="noopener noreferrer">identyfikacji języka</a>). Z katalogu <em>dist</em>, który znajduje się w dystrybucji Solr kopiujemy plik <em>apache-solr-cell-3.5.0.jar</em> do np. katalogu <em>tikaDir</em>, który tworzymy na tym samym poziomie co katalog <em>webapps</em> w Solr. Oraz dodajemy następującą linię do pliku <em>solrconfig.xml</em>:
</p>
<pre class="brush:xml">&lt;lib dir="../tikaLib/" /&gt;</pre>
<p>Powyższa linia mówi Solr, aby wczytał wszystkie biblioteki z podanego katalogu. Następnie kopiujemy wszystkie biblioteki z katalogu <em>contrib/extraction/</em> (także z dystrybucji Solr) do poprzednio stworzonego katalogu <em>tikaDir</em>. Dodatkowe zmiany w pliku <em>solrconfig.xml</em> nie są już potrzebne.</p>
<h3>Indeksowanie danych</h3>
<p>Przyrost zdjęć, których meta dane należało zaindeksować, wynosił około 10 tysięcy tygodniowo. Zdjęcia były składowane we współdzielonej lokalizacji. Wybieraniem zdjęć do indeksowania zajmował się prosty skrypt powłoki, który dla każdego pliku, który został zakwalifikowany, jako nowy, uruchamiał następujące polecenie:
</p>
<pre class="brush:bash">curl 'http://solrmaster:8983/solr/photos/update/extract?literal.id=9926&amp;commit=true" -F "myfile=@Wisła_2011_10_10.JPG"</pre>
<p>Powyższe polecenie wysyła plik o nazwie <em>Wisła_2011_10_10.JPG</em> do handlera<em> /extract&nbsp;</em>i mówi aby wywołać polecenie <em>commit</em> po jego przetworzeniu. Do tego ustawiony zostaje unikalny klucz dla dokumentu (parametr <em>literal.id</em>), który powstanie po przetworzeniu wysyłanego pliku.</p>
<h3>Zapytania</h3>
<p>Oprócz standardowego filtrowania po autorze,&nbsp; czy innych atrybutach zdjęcia wymaganie odnośnie wyszukiwania było jedno &#8211; ma działać. Stwierdziliśmy, że jeżeli sami mielibyśmy korzystać z powstającej aplikacji, na pewno ważnymi polami byłby autor oraz nazwa pliku. Zapytania, które odpowiadały temu wymaganiu wyglądały mniej więcej, tak jak to poniższe:
</p>
<pre class="brush:xml">q=jan+kowalski+wisła&amp;qf=name^100+author^1000+iso+aperture+exposure_time+focal&amp;defType=dismax</pre>
<p>Jak widać zapytanie jest bardzo proste. Dwa pola, spośród obecnych w indeksie są promowane &#8211; nazwa zdjęcia oraz jego autor. Znaczenie tych pól zostało określone poprzez dodanie odpowiednich podbić na etapie zapytania. Reszcie przeszukiwanych pól nie określono podbicia, a zatem jego wartość wyniosła 1.</p>
<h3>Podsumowując</h3>
<p>Opisanie powyżej wdrożenie jest dość proste. Sama aplikacja działa i ma się dobrze, jak również działa wyszukiwanie. Następnymi krokami, jakie należałoby uczynić w przypadku aplikacji, która byłaby wykorzystywana w większym gronie użytkowników, to m.in. tunning JVM i samego Solr. Jednym z elementów poprawiania działania Solr byłoby na pewno strojenie jakości wyników wyszukiwania i wydajności samego rozwiązania. Ale to zostanie opisanie w przyszłości.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2012/02/20/prosta-wyszukiwarka-zdjec/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Proces wyszukiwania</title>
		<link>https://solr.pl/2010/08/09/proces-wyszukiwania/</link>
					<comments>https://solr.pl/2010/08/09/proces-wyszukiwania/#respond</comments>
		
		<dc:creator><![CDATA[Marek Rogoziński]]></dc:creator>
		<pubDate>Mon, 09 Aug 2010 16:12:16 +0000</pubDate>
				<category><![CDATA[Ogólna]]></category>
		<category><![CDATA[faceting]]></category>
		<category><![CDATA[filtrowanie]]></category>
		<category><![CDATA[podstawy]]></category>
		<category><![CDATA[sortowanie]]></category>
		<category><![CDATA[wyszukiwanie]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=20</guid>

					<description><![CDATA[Niniejszym inaugurujemy część solr.pl poświęconą tym zagadnieniom, które nie są związane z konkretnym silnikiem wyszukiwania a raczej z budową i rozwojem funkcjonalności serwisów internetowych związanych z wyszukiwaniem. Czy zastanawialiście się co powoduje, że wyszukiwarka w serwisie jest uważana za dobrą?]]></description>
										<content:encoded><![CDATA[<p>Niniejszym inaugurujemy część solr.pl poświęconą tym zagadnieniom, które nie są związane z konkretnym silnikiem wyszukiwania a raczej z budową i rozwojem funkcjonalności serwisów internetowych związanych z wyszukiwaniem.</p>
<p>Czy zastanawialiście się co powoduje, że wyszukiwarka w serwisie jest uważana za dobrą? By odpowiedzieć na to pytanie, należy się zastanowić, jak wygląda typowy proces znajdowania przez klienta pożądanej przez niego informacji. I czy jest coś takiego, jak typowy proces.</p>
<p><span id="more-20"></span></p>
<p>W projektach, w których udało mi się uczestniczyć dobrze sprawdzał się model mówiący o podziale na następujące fazy:</p>
<ul>
<li>wyszukiwanie</li>
<li>redefinicja zapytania</li>
<li>filtracja</li>
<li>sortowanie</li>
<li>przeglądanie wyników</li>
</ul>
<p>Nie wszystkie te fazy muszą wystąpić, ich kolejność czasem będzie inna, czasem też poszczególne fazy będą występować wielokrotnie. Również w zależności od produktu, posiadanych danych i ich ilości nie wszystkie z nich system musi udostępniać.</p>
<p><strong>1. Wyszukiwanie</strong></p>
<p><strong><img decoding="async" class="alignleft size-medium wp-image-212" style="margin: 10px" src="http://solr.pl/wp-content/uploads/2010/08/wyszukiwanie-300x124.png" alt="" width="300" height="124"></strong>Tu użytkownik może wykazać się największą inwencją wpisując w pole (albo wiele pól) frazę wyszukiwania. I jest to jednocześnie krytyczny moment, w którym często nowy użytkownik podejmuje decyzję: zostać czy znaleźć inny, lepszy serwis. Na co zwykle zwracamy uwagę:</p>
<ul>
<li>czytelność wyników i sensowność 	doboru wyświetlanych informacji – celem użytkownika jest 	znalezienie konkretnego elementu lub grupy elementów spełniających 	kryteria (często mętne i niekonkretne) wyszukiwania. Dlatego musi 	mieć możliwość wstępnego odrzucenia tych elementów, które mu 	z jakiś powodów nie pasują. Błędem jest brak podstawowych dla 	użytkownika informacji (np. serwis z ogłoszeniami sprzedaży 	mieszkań, który nie pokazuje na liście wyników metrażu ani 	lokalizacji! )</li>
<li>liczba znalezionych wyników – 	jeśli wyników jest mało, może to np. sugerować ograniczony 	asortyment w sklepie</li>
<li>przystawanie wyników do frazy 	wyszukiwania – jeśli w sklepie komputerowym na hasło: „notebook” 	na pierwsza strona zawiera tylko pokrowce na notebooki, może to 	sugerować, że firma sprzedaje tylko akcesoria</li>
<li>możliwości nawigacji i łatwość 	dokonania wyboru – jeśli wyników wyszukiwania jest dużo,  	zostawienie użytkownikowi możliwości tylko zmiany zapytania albo 	męczącego przebijania  się przez strony wyników nie jest dobrym 	pomysłem.</li>
</ul>
<p><strong>2. Redefinicja zapytania</strong></p>
<p>W zależności od uzyskanych wyników wyszukiwania, zwykle od pierwszego wrażenia jakości tych wyników, użytkownik może zdecydować się powtórzyć wyszukiwanie. Im więcej faz redefinicji, tym gorsze wrażenie klienta i większa szansa na opuszczenie sklepu. Zwłaszcza, jeśli użytkownik, w jego mniemaniu wpisał bardzo ogólną frazę, a nie dostał żadnych wyników.</p>
<p><strong>3. Filtracja</strong></p>
<p><img fetchpriority="high" decoding="async" class="alignleft size-medium wp-image-210" style="margin: 15px" src="http://solr.pl/wp-content/uploads/2010/08/filtrowanie-185x300.png" alt="" width="185" height="300">Rodzaj zwróconych wyników jest w porządku, pytanie, jak teraz użytkownik może ograniczyć ich liczbę do tych, które są szczególnie interesujące (czyli odrzucić te mniej ciekawe). W tym celu umożliwia się dalsze nawigowanie po wynikach wyszukiwania w oparciu o filtry. Tutaj zwykle zwracamy uwagę na:</p>
<ul>
<li>łatwość dodawania i usuwania 	filtru – zakładając, że użytkownik ma jedynie ogólne pojęcie 	czego szuka, należy się spodziewać, że będzie on wielokrotnie 	zmieniał kryteria wyszukiwania – niedopuszczalne są ścieżki 	nawigacji, gdzie jedyną metodą powrotu do wcześniej 	odfiltrowanych elementów jest przycisk „powrót” w 	przeglądarce, lub rozpoczęcie kolejnego wyszukiwania.</li>
<li>zależność filtrów od rodzaju 	wyszukiwania – szukając nowego komputera interesujący jest inny 	zestaw parametrów niż wybierając książkę. Chociaż brzmi to 	jak oczywistość, zbyt często można spotkać sytuacje, gdzie 	zmiana asortymentu sklepu nie pociąga za sobą zmian definicji 	filtrów, lub zestaw filtrów jest narzucony „z góry”. W 	efekcie pojawiają się opcje typu „kolor opon”.</li>
<li>podanie liczb określających 	liczbę wyników po zastosowaniu filtra – niedoceniana 	funkcjonalność, jednak pozwala na wybieranie przez użytkownika 	optymalnego sposobu filtrowania: jeśli koniecznie w notebooku muszę 	mieć wbudowaną kamerę, to filtr „Z wbudowaną kamerą (3)” od 	razu sugeruje, że wybór koloru będzie mniej ważny i nie ma sobie 	co nim zawracać głowy.</li>
</ul>
<p><strong>4. Sortowanie<br />
</strong></p>
<p><img decoding="async" class="alignleft size-full wp-image-211" style="margin: 15px" src="http://solr.pl/wp-content/uploads/2010/08/sortowanie.png" alt="" width="194" height="35">Pozwala się zająć klientowi przeglądaniem wyników w najwygodniejszej kolejności (np. od najtańszych produktów). W praktyce liczba opcji jest mocno ograniczona, np. Pomysł sortowania po cechach produktu może konfliktować z filtrowaniem.</p>
<p><strong>5. Przeglądanie Wyników</strong></p>
<p>Tutaj użytkownik już zapoznaje się z wybranymi produktami. Z punktu widzenia wyszukiwania to już dość nudny temat <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;" /> Warto jednak pamiętać o wygodnym powrocie do listy wyników: tu błędem jest np. automatyczny powrót na pierwszą stronę wyników, albo zmuszanie użytkownika do  przewijania strony w poszukiwaniu ostatnio oglądanego elementu.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2010/08/09/proces-wyszukiwania/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
