<?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>tika &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/tika/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>Identyfikacja języka dokumentu</title>
		<link>https://solr.pl/2012/01/23/identyfikacja-jezyka-dokumentu/</link>
					<comments>https://solr.pl/2012/01/23/identyfikacja-jezyka-dokumentu/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 23 Jan 2012 20:43:52 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[identyfikacja]]></category>
		<category><![CDATA[język]]></category>
		<category><![CDATA[języka]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[tika]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=355</guid>

					<description><![CDATA[Jedną z funkcjonalności najnowszej wersji Solr (czyli 3.5) jest możliwość identyfikacji języka indekowanego dokumentu na etapie indeksowania. Dzisiejszy wpis postanowiłem poświęcić tej funkcjonalności i przyjrzeć się jak tym razem Apache Solr współgra z Apache Tika. Na początek Należy pamiętać, iż]]></description>
										<content:encoded><![CDATA[<p>Jedną z funkcjonalności najnowszej wersji Solr (czyli <a href="http://solr.pl/2011/11/27/apache-lucene-i-solr-3-5/" target="_blank" rel="noopener noreferrer">3.5</a>) jest możliwość identyfikacji języka indekowanego dokumentu na etapie indeksowania. Dzisiejszy wpis postanowiłem poświęcić tej funkcjonalności i przyjrzeć się jak tym razem Apache Solr współgra z Apache Tika.</p>
<p><span id="more-355"></span></p>
<h3>Na początek</h3>
<p>Należy pamiętać, iż opisywana funkcjonalność została wprowadzona w Solr w wersji 3.5.</p>
<h3>Założenia</h3>
<p>Język będziemy wykrywać na postawie dwóch pól:&nbsp;<em>title</em>&nbsp;oraz&nbsp;<em>body</em>. Chcemy, aby wykryty język został zapisany w polu o nazwie <em>lang</em>.</p>
<h3>Struktura naszego indeksu</h3>
<p>Struktura indeksu jest oczywiście mocno uproszczona i zawiera jedynie pola potrzebne do testu. 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="title" type="text_ws" indexed="true" stored="true" /&gt;
&lt;field name="body" type="text_ws" indexed="true" stored="true" /&gt;
&lt;field name="lang" type="string" indexed="true" stored="true" /&gt;</pre>
<p>Wszystkie pola oznaczone są jako <em>stored=&#8221;true&#8221;</em>, aby zobaczyć wynik przetwarzania dokumentu przez procesor.</p>
<h3>Konfiguracja update request processor&#8217;a</h3>
<p>Aby móc wykorzystać funkcjonalność identyfikacji języka dokumentu konieczna jest konfiguacja następujących procesora aktualizacji. Skorzystamy z procesora opartego o Apache Tika (choć istnieje także druga implementacja oparta o&nbsp;<a href="http://code.google.com/p/language-detection/">http://code.google.com/p/language-detection/</a>). &nbsp;W tym celu dodajemy następujący update request processor do pliku <em>solrconfig.xml</em>:
</p>
<pre class="brush:xml">&lt;updateRequestProcessorChain name="langid"&gt;
  &lt;processor name="langid" class="org.apache.solr.update.processor.TikaLanguageIdentifierUpdateProcessorFactory"&gt;
    &lt;lst name="defaults"&gt;
      &lt;str name="langid.fl"&gt;title,body&lt;/str&gt;
      &lt;str name="langid.langField"&gt;lang&lt;/str&gt;
    &lt;/lst&gt;
  &lt;/processor&gt;
  &lt;processor class="solr.LogUpdateProcessorFactory" /&gt;
  &lt;processor class="solr.RunUpdateProcessorFactory" /&gt;
&lt;/updateRequestProcessorChain&gt;</pre>
<p>Inne parametry <em>TikaLanguageIdentifierUpdateProcessorFactory</em> opisane są na wiki Apache Solr pod adresem:&nbsp;<a href="http://wiki.apache.org/solr/LanguageDetection">http://wiki.apache.org/solr/LanguageDetection</a>.</p>
<h3>Dodatkowe, potrzebne biblioteki</h3>
<p>Aby powyższa zmiana zaczęła działać potrzebujemy jeszcze dodatkowych bibliotek, a dokładniej jednej biblioteki. Z katalogu <em>dist</em>, który znajduje się w dystrybucji Solr kopiujemy plik <em>apache-solr-langid-3.5.0.jar</em>&nbsp;do np. katalogu <em>tikaDir</em>, który tworzyny na tym samym poziomie co katalog <em>webapps</em>&nbsp;w Solr. Oraz dodajemy następującą linię do pliku <em>solrconfig.xml</em>:
</p>
<pre class="brush:xml">&lt;lib dir="../tikaLib/" regex="apache-solr-langid-\d.*\.jar" /&gt;</pre>
<p>Następna biblioteka, której potrzebujemy to Tika wraz z przyległościami (<em>tika-app-1.0.jar</em>) dostępna np. pod adresem:&nbsp;<a href="http://tika.apache.org/">http://tika.apache.org/</a>. Po skopiowaniu do katalogu <em>tikaDir</em>&nbsp;dodajemy następujący wpis do pliku <em>solrconfig.xml:</em>
</p>
<pre class="brush:xml">&lt;lib dir="../tikaLib/" regex="tika-app-1.0.jar" /&gt;</pre>
<h3>Testowe dokumenty</h3>
<p>Do testów przygotowałem trzy dokumenty zawierające po jednym dokumencie w języku angielskim, polskim oraz niemieckim. Ich treść została pobrana z Wikipedii. Wyglądają następująco:</p>
<h4>tika_en.xml</h4>
<pre class="brush:xml">&lt;add&gt;
&lt;doc&gt;
  &lt;field name="id"&gt;1&lt;/field&gt;
  &lt;field name="title"&gt;Water&lt;/field&gt;
  &lt;field name="body"&gt;Water is a chemical substance with the chemical formula H2O. A water molecule contains one oxygen and two hydrogen atoms connected by covalent bonds. Water is a liquid at ambient conditions, but it often co-exists on Earth with its solid state, ice, and gaseous state (water vapor or steam). Water also exists in a liquid crystal state near hydrophilic surfaces.[1][2] Under nomenclature used to name chemical compounds, Dihydrogen monoxide is the scientific name for water, though it is almost never used.&lt;/field&gt;
&lt;/doc&gt;
&lt;/add&gt;</pre>
<h4>tika_pl.xml</h4>
<pre class="brush:xml">&lt;add&gt;
&lt;doc&gt;
  &lt;field name="id"&gt;2&lt;/field&gt;
  &lt;field name="title"&gt;Woda&lt;/field&gt;
  &lt;field name="body"&gt;Woda (tlenek wodoru; nazwa systematyczna IUPAC: oksydan) – związek chemiczny o wzorze H2O, występujący w warunkach standardowych w stanie ciekłym. W stanie gazowym wodę określa się mianem pary wodnej, a w stałym stanie skupienia – lodem. Słowo woda jako nazwa związku chemicznego może się odnosić do każdego stanu skupienia.&lt;/field&gt;
&lt;/doc&gt;
&lt;/add&gt;</pre>
<h4>tika_de.xml</h4>
<pre class="brush:xml">&lt;add&gt;
&lt;doc&gt;
  &lt;field name="id"&gt;3&lt;/field&gt;
  &lt;field name="title"&gt;Wasser&lt;/field&gt;
  &lt;field name="body"&gt;Wasser (H2O) ist eine chemische Verbindung aus den Elementen Sauerstoff (O) und Wasserstoff (H). Wasser ist die einzige chemische Verbindung auf der Erde, die in der Natur in allen drei Aggregatzuständen vorkommt. Die Bezeichnung Wasser wird dabei besonders für den flüssigen Aggregatzustand verwendet. Im festen (gefrorenen) Zustand spricht man von Eis, im gasförmigen Zustand von Wasserdampf.&lt;/field&gt;
&lt;/doc&gt;
&lt;/add&gt;</pre>
<h3>Testowanie działania</h3>
<p>Aby zaindeksować dane wywołałem następującą serię poleceń:
</p>
<pre class="brush:xml">curl 'http://localhost:8983/solr/update?update.chain=langid' --data-binary @tika_pl.xml -H 'Content-type:application/xml'
curl 'http://localhost:8983/solr/update?update.chain=langid' --data-binary @tika_en.xml -H 'Content-type:application/xml'
curl 'http://localhost:8983/solr/update?update.chain=langid' --data-binary @tika_de.xml -H 'Content-type:application/xml'
curl 'http://localhost:8983/solr/update?update.chain=langid' --data-binary '&lt;commit/&gt;' -H 'Content-type:application/xml'</pre>
<p>Warto zauważyć, dodatkowy parameter <em>update.chain=langid</em>&nbsp;dodawany do requestu. Określna on update processor jaki powinien zostać użyty do przetwarzania danych. W tym wypadku chcemy, aby był to nasz zdefiniowany update processor.</p>
<h3>Zaindeksowane dane</h3>
<p>Sprawdźmy zatem co zostało zaindeksowane. Zróbmy to poprzez wysłanie następującego zapytania: <em>q=*:*&amp;indent=true</em>.
</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;response&gt;
&lt;lst name="responseHeader"&gt;
  &lt;int name="status"&gt;0&lt;/int&gt;
  &lt;int name="QTime"&gt;0&lt;/int&gt;
  &lt;lst name="params"&gt;
    &lt;str name="indent"&gt;true&lt;/str&gt;
    &lt;str name="q"&gt;*:*&lt;/str&gt;
  &lt;/lst&gt;
&lt;/lst&gt;
&lt;result name="response" numFound="3" start="0"&gt;
  &lt;doc&gt;
    &lt;str name="body"&gt;Woda (tlenek wodoru; nazwa systematyczna IUPAC: oksydan) – związek chemiczny o wzorze H2O, występujący w warunkach standardowych w stanie ciekłym. W stanie gazowym wodę określa się mianem pary wodnej, a w stałym stanie skupienia – lodem. Słowo woda jako nazwa związku chemicznego może się odnosić do każdego stanu skupienia.&lt;/str&gt;
    &lt;str name="id"&gt;2&lt;/str&gt;
    &lt;str name="lang"&gt;pl&lt;/str&gt;
    &lt;str name="title"&gt;Woda&lt;/str&gt;
  &lt;/doc&gt;
  &lt;doc&gt;
    &lt;str name="body"&gt;Water is a chemical substance with the chemical formula H2O. A water molecule contains one oxygen and two hydrogen atoms connected by covalent bonds. Water is a liquid at ambient conditions, but it often co-exists on Earth with its solid state, ice, and gaseous state (water vapor or steam). Water also exists in a liquid crystal state near hydrophilic surfaces.[1][2] Under nomenclature used to name chemical compounds, Dihydrogen monoxide is the scientific name for water, though it is almost never used.&lt;/str&gt;
    &lt;str name="id"&gt;1&lt;/str&gt;
    &lt;str name="lang"&gt;en&lt;/str&gt;
    &lt;str name="title"&gt;Water&lt;/str&gt;
  &lt;/doc&gt;
  &lt;doc&gt;
    &lt;str name="body"&gt;Wasser (H2O) ist eine chemische Verbindung aus den Elementen Sauerstoff (O) und Wasserstoff (H). Wasser ist die einzige chemische Verbindung auf der Erde, die in der Natur in allen drei Aggregatzuständen vorkommt. Die Bezeichnung Wasser wird dabei besonders für den flüssigen Aggregatzustand verwendet. Im festen (gefrorenen) Zustand spricht man von Eis, im gasförmigen Zustand von Wasserdampf.&lt;/str&gt;
    &lt;str name="id"&gt;3&lt;/str&gt;
    &lt;str name="lang"&gt;de&lt;/str&gt;
    &lt;str name="title"&gt;Wasser&lt;/str&gt;
  &lt;/doc&gt;
&lt;/result&gt;
&lt;/response&gt;</pre>
<p>Jak widać, Solr przy pomocy biblioteki Tika, był w stanie poprawnie określić język trzech dokumentów jakie wysłaliśmy do indeksowania. Oczywiście, nie cieszmy się zbyt wcześnie, ponieważ pomyłki będą się zdarzać, szczególnie w przypadku, kiedy w ramach jednego dokumentu wykorzystywanych jest wiele języków.</p>
<h3>Podsumowanie</h3>
<p>Należy pamiętać, iż funkcjonalność detekcji języka dokumentu nie jest idealna i może się mylić. Dodatkowo, im dłuższe dokumenty, tym dokładniej będzie działać opisywana funkcjonalność. Oczywiście problemem jest to, że nie jesteśmy w stanie wykrywać języka podczas wyszukiwania, jednak nie jest to tylko problem Solr. Z tym możemy radzić sobie poprzez identyfikację przeglądarki użytkownika, języka w niej wykorzystywanej, bądź identyfikacji miejsca z którego łączy się do naszej aplikacji.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2012/01/23/identyfikacja-jezyka-dokumentu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Solr: Importowanie danych</title>
		<link>https://solr.pl/2010/09/06/solr-importowanie-danych/</link>
					<comments>https://solr.pl/2010/09/06/solr-importowanie-danych/#respond</comments>
		
		<dc:creator><![CDATA[Marek Rogoziński]]></dc:creator>
		<pubDate>Mon, 06 Sep 2010 06:02:39 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[acf]]></category>
		<category><![CDATA[apache connectors framework]]></category>
		<category><![CDATA[cell]]></category>
		<category><![CDATA[import]]></category>
		<category><![CDATA[lcf]]></category>
		<category><![CDATA[nutch]]></category>
		<category><![CDATA[tika]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=30</guid>

					<description><![CDATA[Solr nie jest przesadnie przyjazny początkującym użytkownikom. Przygotowanie dobrej schemy wymaga pewnego doświadczenia. Zakładając, że mamy już przygotowaną konfigurację, pozostaje nam udostępnienie swoich danych serwerowi wyszukiwania oraz zadbanie o możliwość aktualizacji danych. Sposobów na zaimportowanie danych jest kilka: Update Handler]]></description>
										<content:encoded><![CDATA[<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } 		PRE.western { font-family: "DejaVu Sans Mono", monospace; font-size: 10pt } 		PRE.cjk { font-family: "DejaVu Sans", monospace; font-size: 10pt } 		PRE.ctl { font-family: "DejaVu Sans Mono", monospace; font-size: 10pt } 		H2 { margin-bottom: 0.21cm; page-break-after: avoid } 		H2.western { font-family: "Liberation Sans", sans-serif; font-size: 14pt; font-style: italic; font-weight: bold } 		H2.cjk { font-family: "DejaVu Sans"; font-size: 14pt; font-style: italic; font-weight: bold } 		H2.ctl { font-family: "DejaVu Sans"; font-size: 14pt; font-style: italic; font-weight: bold } --><em>Solr</em> nie jest przesadnie przyjazny początkującym użytkownikom. Przygotowanie dobrej schemy wymaga pewnego doświadczenia. Zakładając, że mamy już przygotowaną konfigurację, pozostaje nam udostępnienie swoich danych serwerowi wyszukiwania oraz zadbanie o możliwość aktualizacji danych.</p>
<p><span id="more-30"></span></p>
<p>Sposobów na zaimportowanie danych jest kilka:</p>
<ul>
<li>Update Handler</li>
<li>Cvs Request Handler</li>
<li>Data Import Handler</li>
<li>Extracting Request Handler (Solr 	Cell)</li>
<li>Skorzystać z bibliotek klienckich 	(np. Solrj)</li>
<li>Apache Connectors Framework 	(dawniej Lucene Connectors Framework)</li>
<li>Apache nutch</li>
</ul>
<p>Do tego można jeszcze dodać streaming, jako sposób przesyłania danych. Jak widać, panuje tutaj pewne zamieszanie i ciężko na pierwszy rzut oka podać najlepszą metodę do zastosowania w konkretnym wypadku.</p>
<h2>Update Handler</h2>
<p>Chyba najbardziej popularna metoda, ze względu na prostotę. Wymaga przygotowania odpowiedniego XML oraz przesłanie go poprzez HTTP do serwera Solr. Umożliwia podbijanie ważności dokumentów i pojedynczych pól.</p>
<h2>CSV Request Handler</h2>
<p>W przypadku, gdy dane wejściowe mamy w postaci CSV (Coma Separated Values) lub TSV (Tab Separated Values) ta opcja może być najwygodniejsza. Niestety, w przeciwieństwie do Update Handler, nie ma możliwości podbijania ważności.</p>
<h2>Data Import Handler</h2>
<p>Ta metoda jest mniej popularna, wymaga dodatkowej, czasem dość skomplikowanej konfiguracji, jednak pozwala na bezpośrednie podpięcie się do źródła danych. Dzięki temu nie wymaga żadnych dodatkowych skryptów eksportujących dane ze źródła i konwertujących je na format wymagany przez Solr. Standardowo jest dostępna integracja z bazami danych (w oparciu o JDBC),  źródłami udostępniającymi XML (np. RSS), email (poprzez protokół IMAP), dokumenty obsługiwane przez projekt apache Tika (np. Openoffice,  word, rtf, html i wiele innych). Dodatkowo można dopisywać własne źródła i transformacje.</p>
<h2>Extracting Request Handler (Solr Cell)</h2>
<p>Wyspecjalizowany handler do indeksowania treści dokumentów przechowywanych w plikach o różnych formatach. Lista obsługiwanych formatów jest dość szeroka a do indeksowania wykorzystywany jest projekt apache Tika. Wadą tego rozwiązania jest konieczność budowania dodatkowych rozwiązań dostarczających do SOLR namiary na dokument i informacje o identyfikatorze dokumentu oraz brak możliwości uzupełniania dokumentów o dodatkowe, zewnętrzne względem dokumentu, metadane.</p>
<h2>Biblioteki klienckie</h2>
<p>Solr udostępnia biblioteki klienckie do wielu języków programowania. Ich możliwości różnią się miedzy sobą, natomiast w przypadku, gdy dane są generowane na bieżąco przez aplikację i czas, po którym te dane muszą być dostępne do wyszukiwania jest bardzo mały, indeksowanie w ten sposób często jest jedyną dostępną opcją.</p>
<h2>Apache Connectors Framework</h2>
<p><a title="Apache Connectors Framework (ACF)" href="http://incubator.apache.org/connectors/">ACF</a> jest to relatywnie nowy projekt, który szerszej publiczności objawił się na początku 2010 roku. Projekt początkowo był wewnętrznym projektem prowadzonym przez firmę MetaCarta, został przekazany społeczności open source i w chwili obecnej rozwijany w ramach inkubatora apache. W założeniu jest to system, który dzięki szeregowi wtyczek pozwala „wyklikać” połączenie ze źródłem danych. W chwili obecnej brak jest opublikowanych wersji, ale sam system już warty jest zainteresowania w przypadku konieczności integracji z takimi systemami jak: FileNet P8 (IBM), Documentum (EMC), LiveLink (OpenText), Patriarch (Memex), Meridio (Autonomy), Windows shares (Microsoft) i SharePoint (Microsoft).</p>
<h2>Apache nutch</h2>
<p><a title="Apache Nutch" href="http://nutch.apache.org/">Nutch</a> to zasadzie to oddzielny projekt prowadzony przez Apache (wcześniej w ramach Apache Lucene). Dla osoby zajmującej się serwerem Solr jest on o tyle ciekawy, że pozwala na taką konfigurację, która umożliwia pobieranie stron WWW i indeksowanie ich poprzez Solr.</p>
<h2>Słowo o streamingu</h2>
<p>Streaming oznacza możliwość powiadomienia Solr,&nbsp; skąd pobrać dane do zindeksowania. Pozwala to na uniknięcie zbędnego przesyłania danych przez sieć, jeśli dane znajdują się na zasobie lokalnym względem serwera indeksującego, lub podwójnego przesyłania danych (ze źródła do importera, z importera do Solra).</p>
<h2>I słowo o bezpieczeństwie</h2>
<p>Solr z założenia jest przewidziany do stosowania w architekturze zakładającej pracę w środowisku bezpiecznym. <strong>Bardzo ważne</strong> jest jednak zwrócenie uwagi na to, kto i jakie polecenia jest w stanie wykonywać. O ile zwracane dane można w miarę prosto ograniczyć, poprzez wymuszenie stosowania filtrów w definicji handlerów, o tyle w przypadku indeksowania nie jest to już takie proste. W szczególności niebezpieczny wydaje się być Solr Cell – nie tylko pozwoli na odczytanie dowolnego pliku, do którego ma dostęp Solr (np. pliki z hasłami), ale dodatkowo da możliwość atakującemu na ich wygodne przeszukiwanie w celu uzyskania przydatnych informacji <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>
<h2>Inne opcje</h2>
<p>Powyżej starałem się uwzględnić opcje, które nie wymagają dodatkowej pracy. Problemem może być definicja tej dodatkowej pracy, bo czasem łatwiej napisać dodatkową wtyczkę, niż przebijać się przez niezliczone opcje konfiguracyjne czy tworzyć gigantyczne XMLe. Dlatego też w wyborze metod kierowałem się własnym wyczuciem, co skutkowało pominięciem kilku sposobów (np. pobieranie danych ze stron WWW za pomocą Apache Droids lub Heritrixa, czy rozwiązania oparte o Open Pipeline lub Open Pipe).</p>
<p>Na pewno w tym krótkim artykule udało mi się pominąć jakieś ciekawe sposoby. Jeśli tak, proszę o komentarze, chętnie uaktualnię ten wpis <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/2010/09/06/solr-importowanie-danych/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Lucene Eurocon 2010</title>
		<link>https://solr.pl/2010/07/12/lucene-eurocon-2010/</link>
					<comments>https://solr.pl/2010/07/12/lucene-eurocon-2010/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 12 Jul 2010 18:21:41 +0000</pubDate>
				<category><![CDATA[Konferencje]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[eurocon]]></category>
		<category><![CDATA[eurocon 2010]]></category>
		<category><![CDATA[field collapsing]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[flexible indexing]]></category>
		<category><![CDATA[guardian]]></category>
		<category><![CDATA[indexing]]></category>
		<category><![CDATA[integracja]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[near real time]]></category>
		<category><![CDATA[nre]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[solr cloud]]></category>
		<category><![CDATA[tika]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=7</guid>

					<description><![CDATA[Po ogłoszeniu przez Apache Software Fundation zamiaru rezygnacji z organizacji ApacheCon na starym kontynencie nie zostało żadnej konferencji poświęconej projektom spod znaku Apache. Przyroda nie lubi pustki, a co za tym idzie firma Lucid Imagination postanowiła, przy współpracy ze sponsorami,]]></description>
										<content:encoded><![CDATA[<p>Po ogłoszeniu przez <strong>Apache Software Fundation</strong> zamiaru rezygnacji z organizacji ApacheCon na starym kontynencie nie zostało żadnej konferencji poświęconej projektom spod znaku <strong>Apache</strong>. Przyroda nie lubi pustki, a co za tym idzie firma <a href="http://www.lucidimagination.com/" target="_blank" rel="noopener noreferrer">Lucid Imagination</a> postanowiła, przy współpracy ze sponsorami, zorganizować w Pradze pierwszą konferencję poświęconą w całości tematom związanym z Lucene i Solr &#8211; <a href="http://lucene-eurocon.org/" target="_blank" rel="noopener noreferrer">Lucene EuroCon</a>. Ze względu na to, że mieliśmy przyjemność uczestniczyć w tej konferencji postanowiliśmy zdać Wam krótką relację z jej przebiegu.</p>
<p><span id="more-7"></span></p>
<p>Konferencja została przez organizatorów podzielona na dwie części: treningową oraz typowo konferencyjną. O części treningowej nie napiszę wiele, ze względu na to, że nie uczestniczyliśmy w tej części konferencji. Treningi były prowadzone przez dwóch commiterów projektu Lucene/Solr: Erik`a Hatcher`a oraz Grant`a Ingersoll. Więcej informacji dotyczących tematów, jakie były poruszane w tej części konferencji można znaleźć pod adresem <a href="http://lucene-eurocon.org/training.html" target="_blank" rel="noopener noreferrer">http://lucene-eurocon.org/training.html</a>.</p>
<h3>Początek</h3>
<p>Właściwa konferencja zaczęła się w czwartek, 20 maja, od powitania, a następnie dwóch prezentacji: &#8222;<em>The Search Revolution &#8211; How Lucene &amp; Solr Are Changing the World</em>&#8221; poprowadzonej przez CEO Lucid Imagination &#8211; Eric`a Gries (<a href="http://lucene-eurocon.org/slides/The-Search-Revolution-How-Lucene-&amp;-Solr-Are-Changing-the-World_Eric-Gries.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>) oraz &#8222;<em>From Publisher To Platform: How The Guardian Used  Content, Search, and Open Source To Build a Powerful New Business Model</em>&#8221; (<a href="http://lucene-eurocon.org/slides/From-Publisher-To%20Platform-the-Guardian_Stephen-Dunn.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>) prezentowanej przez Stephen`a Dunn, stojącego na czele działu strategii i technologii w wydawnictwie The Guardian. Eric Gries w swojej prezentacji skupił się na rosnącym zapotrzebowaniu na przetwarzanie informacji, ich wyszukiwanie oraz oczywiście projektach Lucene i Solr, które w obu tych przypadkach sprawdzają się znakomicie. Oczywiście nie zabrakło także informacji o rosnącym zainteresowaniu na rynku pracy osobami, które posiadają wiedzę na temat wspomnianych projektów. Nie mógłbym nie wspomnieć, iż zazdroszczę umiejętności zainteresowania słuchaczy i takiego prowadzenia prezentacji. Chylę czoła. Natomiast druga z prezentacji, prowadzona przez Stephen`a Dunn to omówienie nowej platformy developerskiej wydawnictwa The Guardian nazwanej przez twórców &#8222;The Open Platform&#8221; pozwalającej na dostęp do bazy artykułów wydawnictwa The Guardian od 1991 rok, która w tym momencie składa się z około miliona dokumentów i ciągle rośnie. Autor skupił na opisie technicznych szczegółów związanych z implementacją w oparciu o silnik wyszukiwania Solr oraz na tym, co zyskują developerzy korzystając z platformy wydawnictwa.</p>
<p>Następnie konferencja podzieliła się na dwa tory. Ze względu na to, że fizyczna obecność możliwa była tylko na jednej z dwóch prezentacji, będę opisywał tylko te prezentacje na których byłem obecny. Dla ścisłości &#8211; pełna agenda dostępna jest pod adresem <a href="http://lucene-eurocon.org/agenda.html" target="_blank" rel="noopener noreferrer">http://lucene-eurocon.org/agenda.html</a>.</p>
<h3>Tika i przyszłość Lucene</h3>
<p>Dwie pierwsze prezentacje upłynęły pod znakiem &#8222;<em>pierwszej ścieżki</em>&#8222;. Na początek, trochę ciekawych, czasem szczegółowych informacji o produkcie jakim jest <a href="http://http://tika.apache.org/" target="_blank" rel="noopener noreferrer">Tika</a> w prezentacji &#8222;<em>Text and Metadata Extraction with Apache Tika</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Text-and-Metadata-Extraction_Jukka-Zitting.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>) prowadzonej przez Jukka Zittinga. Trochę informacji ogólnych, założeń oraz rys historyczny powstania projektu. Następnie informacje stricte techniczne włącznie z fragmentami kodu i pokazaniem jak można wykorzystać <em>framework</em>. Ogólnie dobra prezentacja, której słuchało się z punktu widzenia programisty, bardzo fajnie. Brak przerwy i od razu druga prezentacja, prowadzona przez Uwe Schindler`a oraz Simona Willnauer`a, pod intrygującym tytułem &#8222;<em>Lucene Forecast: Version, Unicode, Flex and Modules</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Lucene-Forecast-Version-Unicode-Flex-and-Mod_Willnauer&amp;Schindler.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>). Z mojego, skromnego punktu widzenia, podczas tej prezentacji otrzymałem ogrom informacji dotyczących przyszłości zarówno Lucene, jak i Solr. Prezentacja zaczęła się tak naprawdę od wyjaśnienia czego dotyczyły ostatnie ruchy w projektach Lucene i Solr, czyli tak naprawdę połączenia developmentu obu projektów, połączenia gron`a commiterów oraz zmiana trybu tworzenia nowych wersji, przynajmniej jeżeli chodzi o Lucene &#8211; mówiąc bardzo krótko, od teraz <em>trunk</em> repozytorium Lucene i Solr odpowiada za przechowywanie rozwojowej wersji projektów (w tym momencie jest to wersja 4.0) oraz to, że wersja 4.0 biblioteki nie będzie wstecznie kompatybilna z poprzednimi wersjami Lucene. Oznacza to również to, iż produkty odparte o Lucene w wersji 3 będą musiały zostać przepisane, ze względu na zmianę API. Dalsze informacje przekazane przez prowadzących były nie mniej ciekawe &#8211; np. plany dodania mechanizmu <em>facetingu</em> znanego z Solr do Lucene. Sporo czasu poświęcono także omówieniu zmian związanych z pełną obsługą Unicode (moduł <em>ICU</em> Lucene) po czym prowadzący przeszli do bardzo ciekawego według mnie tematu, czyli <em>Flexible Indexing</em>. Jednak rozwinięcie tego tematu, jak również dużo więcej informacji o pakiecie <em>ICU</em> w Lucene w kolejnym wpisie.</p>
<p>W czasie trwania dwóch wspomnianych prezentacji, na &#8222;<em>drugiej ścieżce</em>&#8221; trwały dwie inne prezentacje. Poniżej ich tytuły wraz ze slajdami dla osób zainteresowanych. Niestety ze względu na to, że w nich nie uczestniczyłem, nie jestem w stanie powiedzieć na ich temat nic więcej:</p>
<ul>
<li><em>&#8222;Use of Solr at Trovit, A Leading Search Engine For Classified Ads</em>&#8221; prowadzona przez Marc`a Sturlese (<a href="http://lucene-eurocon.org/slides/Use-of-Solr-at-Trovit-Classified-Ads_Marc_Sturlese.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>).</li>
<li>&#8222;<em>Implementing Solr in Online Media As An Alternative to Commercial Search Products</em>&#8221; prowadzona przez Bo Raun`a (<a href="http://lucene-eurocon.org/slides/Implementing-Solr-in-Online-Media_Bo-Raun.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>).</li>
</ul>
<h3>Magia post-procesingu</h3>
<p>Po obiedzie i przerwie zdecydowałem się nie zmieniać ścieżki i obejrzeć prezentację Andrzeja Białeckiego pod tytułem &#8222;<em>Munching and Crunching: Lucene Index Post-processing</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Munching-&amp;-crunching-Lucene-index-post-processing-and-applications_Andrzej-Bialecki.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>) i decyzja ta okazała się strzałem w przysłowiową dziesiątkę. Postanowiłem, że w tym momencie wspomnę tylko o czym była prezentacja, ponieważ było w niej tyle ważnych, moim zdaniem informacji, iż nie napisanie oddzielnego tekstu na ten temat będzie grzechem. Przedstawione informacje to głównie możliwości rozdzielania indeksu, czyszczenie, filtrowanie, czyli przechowywanie indeksu w pamięci RAM. Jak już pisałem, więcej na ten temat w oddzielnym wpisie. W tym samym czasie w &#8222;<em>ścieżce drugiej</em>&#8221; odbywała się prezentacja pod tytułem &#8222;<em>Bringing Solr to Drupal: A General, and a Library-Specifix Use Case</em>&#8221; prowadzona przez Peter`a Kiraly (<a href="http://lucene-eurocon.org/slides/Bringing-Solr-to-Drupal-A-General-and-Library-Specific-Use-Case_Peter-Kiraly.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>).</p>
<h3>Solr i NLP</h3>
<p>Kolejną prezentację &#8222;<em>pierwszej ścieżki</em>&#8221; pod tytułem &#8222;<em>Solr Schema Demystified</em>&#8221; prowadzoną przez Uri Boness`a postanowiłem opuścić na rzecz &#8222;<em>Integration of Natural Language Processing tools with Solr</em>&#8221; prowadzoną przez Joan`a Codina-Filbà (<a href="http://lucene-eurocon.org/slides/Integration-of-Natural-Language-Processing-tools-with-Solr_Joan-Codina-Filba.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>). Prezentacja ciekawa dla osób starających się zintegrować Solr z narzędziami analizy językowej &#8211; zapisywać wyniki zwracane przez te narzędzia i je wykorzystywać. Przedstawionych zostało trochę informacji na temat wykorzystania <a href="http://uima.apache.org/" target="_blank" rel="noopener noreferrer">UIMA</a>, problemów na jakie natrafili programiści oraz w jaki sposób zostały rozwiązane oraz jak wyglądała kategoryzacja wyników przy użyciu <a href="http://search.carrot2.org" target="_blank" rel="noopener noreferrer">Carrot2</a>. Prezentujący pokazywał także różnice pomiędzy lametem, a wynikiem stemmingu, jak rozpoznawano części mowy oraz w jaki sposób zostało to wykorzystane do klasyfikacji, czy komentarz o danym produkcie miał pozytywny, czy negatywny wydźwięk. Wszystko to w kontekście Lucene/Solr oraz rozwiązania wykorzystującego payload`y, jak również bez ich wykorzystania. Szkoda, tylko, że całość została omówiona w kontekście języka hiszpańskiego, ale cóż, nie można mieć wszystkiego <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h3>Przetwarzanie dokumentów</h3>
<p>Ze względu na to, iż na początku dnia usłyszałem co nieco o &#8222;The Open Platform&#8221; wydawnictwa The Guardian, postanowiłem odpuścić sobie prezentację pod tytułem &#8222;<em>Solr in the Wild: The Guardian Open Platform Content API</em>&#8221; prowadzoną przez Graham`a Tackley (<a href="http://lucene-eurocon.org/slides/Solr-In-The-Wild-The-Guardians-Open-Platform-Content-API_Graham-Tackley.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>) i zamiast niej posłuchać co ma do powiedzenia Max Charas oraz Karl Jansson, czyli prelegenci &#8222;<em>Modular Document Processing for Solr/Lucene</em>&#8221; (<a href="http://lucene-eurocon.org/slides/A-Pipeline-for-Solr_Charas-Jansson.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>). Prezentacja, moim zdaniem, była bardziej pokazaniem możliwości produktów kilku sponsorów konferencji, niż czymś mocno odkrywczym, szczególnie patrząc na poziom niektórych, wcześniejszych prezentacji. Prawdę powiedziawszy, trochę wynudziłem się podczas słuchania tej prezentacji, ale może było to wynikiem przeładowania informacjami i ogólnego zmęczenia.</p>
<h3>Wykorzystanie Solr w IBM</h3>
<p>Po kolejnej krótkiej przerwie rozpoczęły się kolejne dwie prezentacje. Mając do wyboru &#8222;<em>Make Your Domain Object Searchable with Hibernate Search</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Making-Your-Domain-Objects-Searchable-with-Hibernate-Search_Gustavo-Fernandes.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>) prowadzoną przez Gustavo Fernandes`a oraz &#8222;<em>Social and Network Discovery (SaND) over Lucene</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Social-and-Network-Discovery-over-Lucene_Shai-Erera.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>) prowadzoną przez Shai Erera wybrałem tą drugą. W skrócie, prezentacja dotyczyła aplikacji stworzonej w firmie IBM na potrzeby przeszukiwania dokumentów, ludzi, stron itd, stworzonych wewnątrz wymienionej firmy. Prezentujący pokazał w jaki sposób zostało zaimplementowane wyszukiwanie (co i jak możemy wyszukiwać), jak działa zawężanie wyników (faceting, zawężanie oparte o datę, lokalizację, czy źródło pochodzenia informacji), czy prezentacja relacji pomiędzy osobami, czy dokumentami. Oprócz samego wyszukiwania <em>SaND</em> całkiem ciekawą funkcjonalność &#8211; a mianowicie graf relacji pomiędzy znalezionymi osobami/dokumentami/stronami (slajd 25 pokazuje graf zależności pomiędzy osobami). Prezentacja całkiem ciekawa, aczkolwiek przeprowadzona według mnie chaotycznie, co zakłóciło w pewnym stopniu odbiór informacji.</p>
<h3>Migracja z FAST do Solr</h3>
<p>Będąc już zmęczonym wybrałem ostatnią prezentację tego dnia, czyli &#8222;<em>Key Topics When Migrating From FAST to Solr</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Migrating-FAST-to-Solr_Jan-Hoydah.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>) prowadzoną przez Jana Høydahl na rzecz prezentacji &#8222;<em>Query by Document: When &#8222;More Like This&#8221; Is Insufficient</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Query-By-Document-When-More-like-this-is-insufficient.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>) prezentowaną przez Dusan`a Omercevic`a. Ciekawie było posłuchać o niektórych rozwiązaniach, jakie zostały zaimplementowane w <em>FAST</em>, a nie ma ich w Solr oraz jak sobie radzić w przypadku migracji. Jan Høydahl mówił całkiem ciekawie, pokazał różnice pomiędzy obiema technologiami oraz w jaki sposób można radzić sobie przypadku braków niektórych funkcjonalności, zarówno z jednej, jak i z drugiej strony. Co ciekawe, dla osoby, która nie miała doświadczenia komercyjnego z <em>FAST</em>, interesująca sprawa, to informacja, iż większość obróbki danych przygotowywana jest w <em>FAST</em> na etapie indeksowania &#8211; na przykład sortowanie musi być zdefiniowane na etapie indeksowania. Patrząc na <em>FAST</em> widać, czego jeszcze brakuje w Solr &#8211; na przykład pól wielojęzykowych, czy <em>pipeline</em> zintegrowany z silnikiem wyszukiwania. Następnie pokazany został przykładowy proces migracji z <em>FAST</em> do Solr, oczywiście mocno uproszczony, ale pokazujący, jak można ten proces wykonać. Ogólnie, bardzo fajna prezentacja.</p>
<h3>Koniec pierwszego dnia</h3>
<p>Następnie przyszedł czas na 90 minutową przerwę po których odbyło się pięć krótkich prezentacji, już mniej oficjalnych. Ze względu na ich rodzaj, oraz to, że wszyscy byli już bardziej myślami na czeskim festiwalu piwa, na który mieliśmy się udać po prelekcjach jako grupa, postanowiłem, iż tylko je wymienię:</p>
<ul>
<li>&#8222;<em>Social Media Scheduler based on Solr + Hadoop + Amazon EC2</em>&#8221; Pablo Aragón (<a href="http://lucene-eurocon.org/slides/Social-Media-Scheduler-For-Spanish-Blogs_Pablo-Aragon.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>)</li>
<li>&#8222;<em>Introduction to Collaborative Filtering using Mahout</em>&#8221; Frank Scholten (<a href="http://lucene-eurocon.org/slides/Introduction-To-Collaborative-Filtering-Using-Mahout_Frank-Scholten.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>)</li>
<li>&#8222;<em>Enterprise Search meets Enterprise CMS &#8211; TYPO3 and Apache Solr</em>&#8221; Olivier Dobberkau (<a href="http://lucene-eurocon.org/slides/Enterprise-Search-meets-Enterprise-CMS-Apache-Solr-and-TYPO3_Olivier-Dobberkau.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>)</li>
<li>&#8222;<em>BM25 Scoring for Lucene</em>&#8221; Yuval Feinstein (<a href="http://lucene-eurocon.org/slides/BM25-Scoring-For-Lucene_Yuval-Feinstein.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>)</li>
<li>&#8222;<em>How We Scaled Solr to 3+ Billion Documents</em>&#8221; Jason Rutherglen (<a href="http://lucene-eurocon.org/slides/BM25-Scoring-For-Lucene_Yuval-Feinstein.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>)</li>
</ul>
<h3>Dzień drugi</h3>
<p>Drugi dzień konferencji rozpoczął się od krótkiego wstępu poprowadzonego przez Grant`a Ingersoll, po czym rozpoczęła się właściwa część drugiego dnia.</p>
<h3>A więc zaczynamy dzień drugi</h3>
<p>Tak samo, jak w przypadku dnia poprzedniego, na początek dostaliśmy dwie prezentacje: &#8222;<em>Software Disruption: How Open Source, Search, Big Data and Cloud Technology are Disrupting IT</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Software-Disruption-How-Open%20Source-Big-Data-and-The-Cloud-Are-Disrupting-IT_Zack-Urlocker.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>) prowadzona przez Zack`a Urlocker`a oraz &#8222;<em>Solr 1.5 and Beyond</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Solr-15-and-Beyond_Yonik-Seely.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>) prowadzona przez Yonik`a Seeley`a. Pierwsza prezentacja, ze względu na swój marketingowy charakter raczej mało mnie interesowała, co nie zmienia faktu, że w jej trakcie przekazane zostały ciekawe informacje na temat rozwoju oprogramowania ze stajni <em>open source</em>. Nie zabrakło również przewidywań na temat kierunków rozwoju oprogramowania i zwrócenia się ku przetwarzaniu w <em>chmurze</em>. Sam prelegent ma na temat <em>open source</em> dużą wiedzę, jako jeden z ojców sukcesu MySQL`a. Druga prezentacja, była z mojego punktu widzenia dużo bardziej ciekawa, ze względu na techniczne zorientowanie. Dotyczyła m.in. kilku kluczowych tematów dla przyszłości Solr &#8211; połączenie z Lucene, rozszerzenie parsera dismax, integrację z Zookeeper`em (tzw. <em>Solr Cloud</em>), wyszukiwanie geograficzne, funkcjonalność <em>field collapsing</em> oraz NRE (<em>near real time</em>) search. Warto podkreślić, iż prezentacja była bardzo ciekawa, choć mówiła o kilku rzeczach o których usłyszeliśmy już podczas tej konferencji (m.in. <em>Solr Cloud</em>, czy połączenie developmentów). Moim zdaniem warto mieć na oku zmiany, jakie zachodzą w Solr, ponieważ przyszłość projektu rysuje się bardzo jasnych barwach, jeżeli tylko wszystko o czym była mowa podczas prezentacji uda się zrealizować, a przecież wiemy, że to nie wszystko co ma się znaleźć w przyszłych wersjach Solr.</p>
<h3>Grant na temat relevance</h3>
<p>I znów konferencja podzieliła się na dwie ścieżki. Wydawało mi się, że więcej zyskam słuchając Grant`a Ingersoll mówiącego o &#8222;<em>Practical Relevance</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Practical-Relevance_Grant-Ingersoll.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>), niż Steve`a Kearns prezentującego &#8222;<em>Building Multilingual Search Based Application</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Building-Multilingual-Search-Based-Applications_Steve-Kearns.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>). Moim zdaniem się nie pomyliłem. Grant mówił o ogólnie rozumianym poprawianiu jakości wyników wyszukiwania &#8211; w jaki sposób można to robić, czy analizować logi i jak to robić, co można wyciągnąć ze statystyk związanych z wyszukiwaniem i na czym należy się skupić podczas procesu poprawiania jakości. Wspominał o konieczności zbierania informacji od użytkowników, bo to oni docelowo zdecydują o sukcesie, bądź porażce aplikacji. Nie zabrakło również informacji, jak szybko zyskać zadowalające efekty dodając premiowanie dokumentów zawierających frazy składających się z wielu słów. Zbliżając się do końca prezentacji, Grant, mówił o zaawansowanych metodach wpływania na tzw. <em>relevance</em>, czyli o developmencie własnych komponentów odpowiedzialnych za liczenie ważności dokumentów, wspomniał także o projekcie <a href="http://lucene.apache.org/openrelevance" target="_blank" rel="noopener noreferrer">Open Relevance</a> będącym jednym z projektów zawartych w ekosystemie Lucene.</p>
<h3>Lucene Connectors Framework</h3>
<p>Następnie zdecydowałem się zostać w tej samej sali konferencyjnej i posłuchać Karl`a Wright, który mówił na temat Lucene Connectors Framework w prezentacji pod tytułem &#8222;<em>Lucene Connectors Framework: An Introduction</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Lucene-Connectors-Framework-Introduction_Karl-Wright.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>). W tym samym czasie uczestnicy konferencji mogli posłuchać Karel Braeckman i prezentacji pod tytułem &#8222;<em>Unlocking a Broadcaster Video Archive Using Solr</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Unlocking-a-broadcaster-archive-using-Solr_Karel-Braeckman.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>). Wspomniana prezentacja, to tak naprawdę głównie przedstawienie części framework`a, jego założeń oraz architektury. Dowiedzieliśmy się, że sam framework jest obecnie w trakcie migracji z postaci komercyjnej do postaci <em>open source</em>, dlatego w tym momencie dużo funkcjonalności może nie działać, ponieważ część z nich była oparta o komercyjne biblioteki, które z wiadomych przyczyn nie mogą zostać wykorzystane w projekcie <em>open source</em>. O ile sam framework będzie na pewno ciekawym i przydatnym narzędziem uzupełniającym Solr i Lucene o możliwości takie jak odczyt różnych źródeł danych (zarówno metodą <em>PULL</em>, jak i <em>PUSH</em>), możliwość dostarczania danych periodycznie, czy kompleksowy model bezpieczeństwa, to jednak w tym momencie kod średnio nadaje się do wykorzystania we własnej aplikacji i moim zdaniem, w tym momencie, należy traktować framework jak ciekawostkę &#8211; miejmy nadzieję, że to się szybko zmieni.</p>
<h3>Solr + Zookeeper = Solr Cloud</h3>
<p>Po przerwie na lunch i rozmowach z commiterami m.in. projektów Lucene i Solr rozpoczęła się kolejna sesja prezentacji. Wypoczęty i gotowy na słuchanie kolejnych informacji udałem się na prezentację Mark`a Millera pod tytułem &#8222;<em>Solr in the Cloud</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Solr-In-The-Cloud_Mark-Miller.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>). W sali obok rozpoczynała się w tym samym czasie prezentacja pod tytułem &#8222;<em>The Path to Discovery: Facets and the Scent of Information</em>&#8221; (<a href="http://lucene-eurocon.org/slides/The-Path-To-Discovery-Facets-and-the-Scent-Of-Information_Tate-&amp;-Olafsson.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>) której prelegentami byli Tyler Tate oraz Stefan Olafsson. Jak można się domyślić tematem przewodnim prezentacji był tzw. <em>Solr Cloud</em>, czyli rozproszona farma instancji Solr zarządzanie tą instalacją przy pomocy <em>Zookeeper`a</em>. Zaczęło się od przedstawienia architektury master &#8211; slave oraz jak ta architektura wygląda w przypadku rozproszenia indeksu pomiędzy wiele shardów wraz z &#8222;rysem historycznym&#8221;, czyli wspomnieniem o skryptach powłoki i nowej, opartej o język Java replikacji indeksów. Następnie, Mark Miller, przeszedł do opisania głównych założeń, które leżą u podstaw integracji z <em>Zookeeper</em>`<em>em</em>, czyli scentralizowana konfiguracja, <em>fault tolerance</em>, możliwość automatycznego usuwania i dodawania kolejnych instancji Solr, czy wreszcie wsparcie dla sprawdzania dostępności poszczególnych instancji. Omówione zostało co do tej pory zostało zrobione w związku z integracją z <em>Zookeeper`em</em>, co jeszcze na pewno zostało do zrobienia oraz co jest w planach w dalszej przyszłości. Oprócz spraw związanych z zarządzaniem instancjami Mark Miller przedstawił nowość w Solr 1.4, czyli tzw. LoadBalanced Http Solr Server. Podsumowując, prezentacja bardzo ciekawa, pokazująca kolejną ścieżkę rozwoju Solr &#8211; jest na co czekać.</p>
<h3>Chwila wytchnienia</h3>
<p>Podczas, kiedy my rozmawialiśmy z innymi uczestnikami konferencji i nawiązywaliśmy kontakty, trwały dwie kolejne prezentacje:</p>
<ul>
<li>&#8222;<em>Neural Networks, Newspapers and Solr &#8211; A short tour through extending Solr for real-world text-classification</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Neural-Networks-Newspapers-and-Solr_Sven-Maurmann.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>) prezentowana przez Sven`a Maurmann`a</li>
<li>&#8222;<em>Rapid Prototyping</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Rapid-Prototyping-with-Solr_Erik-Hatcher.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>) prezentowana przez Eric`a Hatcher`a</li>
</ul>
<h3>To już prawie koniec</h3>
<p>Ostatnimi prezentacjami, jakie miały być pokazane na konferencji były &#8222;<em>Combatting Information Overload &#8211; Search in Military Information Gathering Systems</em>&#8221; (<a href="http://lucene-eurocon.org/slides/Combatting-Information-Overload-Search-in-Military-Information-Gathering-Systems_Alexandra-Larsson.pdf" target="_blank" rel="noopener noreferrer">slajdy</a>), której prelegentem była pani Alexandra Larsson, kapitan szwedzkich sił powietrznych oraz &#8222;<em>European Language Analysis with Hunspell</em>&#8221; prowadzoną przez Chris`a Male. Po wysłuchaniu części tej drugiej prezentacji zdecydowałem się przejść do przyległej sali konferencyjnej i posłuchać o tym, jak szwedzkie służby wykorzystują Lucene i Solr w swoich systemach analitycznych. Ze względu nie wysłuchanie żadnej z prezentacji od początku do końca postanowiłem nie opisywać żadnej z nich, pomimo tego, że moim zdaniem pani kapitan mówiła o bardzo ciekawym zastosowaniu obu projektów, które to słowa wspomagała przykładami w postaci zrzutów ekranu z aplikacji i tłumaczenia w jaki sposób współgrają ze sobą poszczególne elementy.</p>
<p>Ostatnim akcentem, kończącym Lucene Eurocon 2010, było kilka słów Granta Ingersoll, losowanie wejściówki na Lucene Revolution w Bostonie oraz losowanie kilku egzemplarzy książek, czyli coś dla ludu <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h3>Podsumowanie</h3>
<p>Podsumowując całe wydarzenie jestem zadowolony z tego, że mogłem w nim uczestniczyć. Ciekawe prezentacje, morze pomysłów i planów oraz upewnienie społeczności w tym, że Lucene i Solr są dojrzałymi produktami, które nie spoczęły na laurach i pomimo rosnącego zainteresowania ich obecnym kształtem mają za sobą ludzi, którzy dbają o to, żeby projekty nie stały w miejscu. Mam nadzieję, że będzie mi dane uczestniczyć w Lucene Eurocon 2011 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" />
</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 286px; width: 1px; height: 1px; overflow: hidden;"><a href="http://lucene-eurocon.org/sessions-track1-day1.html#1"><strong>Text  and Metadata Extraction with Apache Tika</strong></a></div>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2010/07/12/lucene-eurocon-2010/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
