<?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>spell &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/spell/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:30:08 +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 4.0: DirectSolrSpellChecker</title>
		<link>https://solr.pl/2012/04/30/solr-4-0-directsolrspellchecker/</link>
					<comments>https://solr.pl/2012/04/30/solr-4-0-directsolrspellchecker/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 30 Apr 2012 21:29:41 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[checker]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[spell]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=414</guid>

					<description><![CDATA[Jedną z nowości, która zostanie zaprezentowana w Solr 4.0, jest nowy rodzaj SpellChecker&#8217;a, który nie potrzebuje własnego indeksu. Postanowiłem przyjrzeć się jego konfiguracji i działaniu. Stan obecny W chwili obecnej (Solr 3.6) mamy do dyspozycji następujące implementacje SpellChecker&#8217;a: org.apache.solr.spelling.IndexBasedSpellChecker org.apache.solr.spelling.FileBasedSpellChecker]]></description>
										<content:encoded><![CDATA[<p>Jedną z nowości, która zostanie zaprezentowana w Solr 4.0, jest nowy rodzaj SpellChecker&#8217;a, który nie potrzebuje własnego indeksu. Postanowiłem przyjrzeć się jego konfiguracji i działaniu.</p>
<p><span id="more-414"></span></p>
<h3>Stan obecny</h3>
<p>W chwili obecnej (<a href="http://solr.pl/2012/04/12/apache-lucene-i-solr-3-6/" target="_blank" rel="noopener noreferrer">Solr 3.6</a>) mamy do dyspozycji następujące implementacje SpellChecker&#8217;a:</p>
<ul>
<li><em>org.apache.solr.spelling.IndexBasedSpellChecker</em></li>
<li><em>org.apache.solr.spelling.FileBasedSpellChecker</em></li>
</ul>
<p>Wraz z nadejściem Solr 4.0, dostaniemy dodatkowo nową implementację:</p>
<ul>
<li><em>org.apache.solr.spelling.DirectSolrSpellChecker</em></li>
</ul>
<h3>Obecne problemy</h3>
<p>W moim przypadku, jednym z głównych problemów <em>IndexBasedSpellChecker&#8217;a</em> była konieczność przebudowywania jego indeksu. Ze względu na to, że operacja mogła trwać długo, nie było możliwości przebudowywania tego indeksu po każdej operacji <em>commit</em>, co w niektórych wypadkach było znaczącym problemem. Oczywiście problem ten nie dotyczył <em>FileBasedSpellChecker&#8217;a</em>, jednak w moim wypadku pełnił rolę pomocniczego mechanizmu poprawiania błędów użytkowników.</p>
<h3>Konfiguracja</h3>
<p>Konfiguracja, jest analogiczna do tej do której przyzwyczaił nas Solr 3. Poniżej przykład:
</p>
<pre class="brush:xml">&lt;searchComponent name="spellcheck" class="solr.SpellCheckComponent"&gt;
  &lt;str name="queryAnalyzerFieldType"&gt;textTitle&lt;/str&gt;
  &lt;lst name="spellchecker"&gt;
    &lt;str name="name"&gt;default&lt;/str&gt;
    &lt;str name="field"&gt;title&lt;/str&gt;
    &lt;str name="classname"&gt;solr.DirectSolrSpellChecker&lt;/str&gt;
    &lt;str name="distanceMeasure"&gt;internal&lt;/str&gt;
    &lt;float name="accuracy"&gt;0.7&lt;/float&gt;
    &lt;int name="maxEdits"&gt;2&lt;/int&gt;
    &lt;int name="minPrefix"&gt;1&lt;/int&gt;
    &lt;int name="maxInspections"&gt;5&lt;/int&gt;
    &lt;int name="minQueryLength"&gt;4&lt;/int&gt;
    &lt;float name="maxQueryFrequency"&gt;0.01&lt;/float&gt;
    &lt;float name="thresholdTokenFrequency"&gt;.01&lt;/float&gt;
  &lt;/lst&gt;
&lt;/searchComponent&gt;</pre>
<p>Co oznaczają poszczególne parametry konfiguracyjne:</p>
<ul>
<li><em>queryAnalyzerFieldType</em> &#8211; nazwa typu na podstawie którego dokonywana będzie analiza zapytania zadanego do SpellChecker&#8217;a.</li>
<li><em>field</em> &#8211; pole, które będzie wykorzystywane do budowania podpowiedzi.</li>
<li><em>classname</em> &#8211; implementacja SpellChecker&#8217;a.</li>
<li><em>distanceMeasure</em> &#8211; algorytm określający odległość pomiędzy słowami, w tym wypadku domyślny, czyli wykorzystujący algorytm Levenshtein&#8217;a.</li>
<li><em>accuracy</em> &#8211; dokładność, jaka musi być osiągnięta, aby podpowiedź była uznana za poprawną.</li>
<li><em>maxEdits</em> &#8211; maksymalna ilość zmian podczas procesu wyliczania termów, możliwe wartości to <em>1</em> i <em>2</em>.</li>
<li><em>minPrefix</em> &#8211; minimalny wspólny przedrostek w podczas wyliczania termów.</li>
<li><em>maxInspections</em> &#8211; maksymalna liczba sprawdzeń dla każdej podpowiedzi.</li>
<li><em>minQueryLength</em> &#8211; minimalna wielkość słowa, aby te było brane pod uwagę jako podpowiedź.</li>
<li><em>maxQueryFrequency</em> &#8211; maksymalny procent dokumentów w jakich może wystąpić słowo, aby było uznane za kandydata do poprawienia (wartość <em>0.01</em> oznacza <em>1%</em>).</li>
<li><em>thresholdTokenFrequency</em> &#8211; minimalny procent dokumentów w jakich musi wystąpić podpowiedź, aby była uznana za poprawną (wartość <em>.01</em> oznacza <em>1%</em>).</li>
</ul>
<p>Powyższe atrybuty konfiguracji pokazują, iż <em>DirectSolrSpellChecker</em> daje nam dość duże pole jeżeli chodzi o konfigurację jego zachowania.</p>
<h3>Korzystanie</h3>
<p><em>DirectSolrSpellChecker</em> nie różni się w kwestii wykorzystania od swoich poprzedników. Tak samo jak w poprzednim wypadku możemy skonfigurować Solr, aby dodawał wyniki działania SpellCheckera do wyników wyszukiwania w każdym zapytaniu lub jako oddzielny handler wywoływany wtedy, kiedy nasza aplikacja uzna to za stosowne. O korzystaniu ze SpellChecker&#8217;a pisaliśmy już kiedyś w przykładowej aplikacji &#8222;<a href="http://solr.pl/2011/05/23/aplikacja-%E2%80%9Esprzedaz-samochodow%E2%80%9D-%E2%80%93-spellcheckcomponent-czy-naprawde-miales-to-na-mysli-cz-5/">Sprzedaż samochodów</a>&#8222;.</p>
<h3>Czego możemy oczekiwać ?</h3>
<p>Zgodnie z informacjami, jakie można znaleźć w zgłoszeniu <a href="https://issues.apache.org/jira/browse/LUCENE-2507">LUCENE-2507</a> <em>DirectSolrSpellChecker</em> uwalnia nas nie tylko od konieczności budowania indeksu SpellCheck&#8217;a, ale także niesie ze sobą szansę na poprawę działania tego mechanizmu. Z tego co widać, <em>DirectSolrSpellChecker</em> działa lepiej od dotychczas dostępnych implementacji kosztem spadku wydajności, którym moim zdaniem jest do zaakceptowania, przynajmniej jeżeli nie potrzebujemy podpowiedzi od SpellCheckera przy każdym zapytaniu.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2012/04/30/solr-4-0-directsolrspellchecker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
