<?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>Hello World: &#187; MySql</title>
	<atom:link href="http://razorblade.netsons.org/category/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://razorblade.netsons.org</link>
	<description>Programmazione web e oltre: php5, Zend Framework, jQuery, Actionscript 3.0, Sandy 3D Engine e altro</description>
	<lastBuildDate>Fri, 28 Aug 2009 18:23:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MySQL: ricerca full-text</title>
		<link>http://razorblade.netsons.org/2008/07/15/mysql-ricerca-full-text/</link>
		<comments>http://razorblade.netsons.org/2008/07/15/mysql-ricerca-full-text/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 12:02:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MySql]]></category>
		<category><![CDATA[against]]></category>
		<category><![CDATA[fulltext]]></category>
		<category><![CDATA[match]]></category>
		<category><![CDATA[match against]]></category>
		<category><![CDATA[ricerca]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[stopwords]]></category>

		<guid isPermaLink="false">http://razorblade.netsons.org/?p=21</guid>
		<description><![CDATA[<h2>Fulltext, che cos'è?</h2>
La funzionalità di ricerca FULLTEXT è un particolare tipo di ricerca del Database MySql effettuata usando la sintassi <strong>MATCH() ... AGAINST()</strong>. All'interno di <strong>MATCH()</strong> andremo ad inserire una lista di campi separati da virgola, in cui andremo a carcare il contenuto di <strong>AGAINST()</strong>. 

Prima di poter utilizzare questa funzionalità <a href='http://razorblade.netsons.org/2008/07/15/mysql-ricerca-full-text/'>[...] Continua</a>


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<h2>Fulltext, che cos&#8217;è?</h2>
<p>La funzionalità di ricerca FULLTEXT è un particolare tipo di ricerca del Database MySql effettuata usando la sintassi <strong>MATCH() &#8230; AGAINST()</strong>. All&#8217;interno di <strong>MATCH()</strong> andremo ad inserire una lista di campi separati da virgola, in cui andremo a carcare il contenuto di <strong>AGAINST()</strong>.</p>
<p>Ecco subito un esempio pratico:</p>
<pre name="code" class="php">SELECT *, MATCH(titolo, sottotitolo, descrizione)
AGAINST('html') AS score FROM articoli
WHERE MATCH(titolo, sottotitolo, descrizione)
AGAINST('html') ORDER BY score DESC
</pre>
<p>Prima di poter utilizzare questa funzionalità però dovremo assicurarci che la tabella che contiene i campi in cui vogliamo andare ad effettuare la ricerca sia di tipo <strong>MyISAM</strong>. Se la tabella è di un&#8217;altro tipo come fare? Modifichiamo il tipo di tabella con questa query:</p>
<pre name="code" class="php">ALTER TABLE miaTabella  ENGINE = MYISAM</pre>
<p>Inoltre, tutti i campi che inseriremo all&#8217;interno di <strong>MATCH()</strong> dovranno essere inseriti come indici FULLTEXT e dovranno essere di tipo CHAR, VARCHAR, or TEXT. Come fare? Con questa query:</p>
<pre name="code" class="php">ALTER TABLE miaTabella
ADD FULLTEXT(primoCampo, secondoCampo, ...);
</pre>
<p>Prima di effettuare qualsiasi modifica al vostro database il consiglio è sempre di <strong>creare una copia di backup </strong>.</p>
<p>Oltre alla stringa di ricerca, <strong>AGAINST</strong> può contenere al suo interno un modifier tra quelli che MySql rende disponibili:</p>
<pre name="code" class="php">search_modifier:
{
IN BOOLEAN MODE
| IN NATURAL LANGUAGE MODE
| IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
| WITH QUERY EXPANSION
}</pre>
<p>Notate che i modifiers <strong>IN NATURAL LANGUAGE MODE</strong> e <strong>IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION</strong> sono stati aggiunti nella versione MySQL 5.1.7 e saranno trattati in un prossimo articolo.</p>
<h2>Ricerche Full-Text Boolean</h2>
<pre name="code" class="php">MATCH(primoCampo, secondoCampo)
AGAINST('+parolaCheDeveEsserePresente
-parolaCheNonDeveEsserepresente' IN BOOLEAN MODE)
</pre>
<p>Per effettuare una ricerca in boolean mode bisogna aggiungere all&#8217;interno di <strong>AGAINST</strong> la parola chiave <strong>IN BOOLEAN MODE</strong> come mostrato nell&#8217;esempio.<br />
La peculiarità del boolean mode è la possibilità di utilizzare i seguenti operatori per raffinare pe proprie ricerche:<br />
<strong>+</strong>: La parola deve esistere in ogni riga.<br />
<strong>-</strong>: La parola non dev&#8217;essere presente. Fate bene attenzione a questo segno. Una stringa di ricerca contenente solo parole precedute dal &#8216;-&#8217; ritornerà sempre un risultato vuoto. Infatti non è valida la logica &#8216;ritorna tutte le righe tranne che quelle dove sono presenti i termini contrassegnati dal -&#8217;.<br />
<strong>*</strong>: L&#8217;asterisco funge da carattere jolly. Anche l&#8217;uso di questo carattere ha bisogno di particolare attenzione soprattutto quando utilizzato con le <strong>stopwords</strong> ( vedi in fondo a questo articolo per la spiegazione sulle stopwords ). Infatti una query di ricerca &#8216;+word +stopword*&#8217; ritornerà meno risultati che di una ricerca &#8216;+word +stopword&#8217; in quanto la prima query richiederà la presenza di &#8217;stopword*&#8217; mentre la seconda query sarà trasformata in &#8216;+word&#8217;.<br />
<strong>( )</strong>: le parentesi servono per creare delle espressioni. Si possono includere parentesi all&#8217;interno di altre parentesi.<br />
<strong> &gt; &lt; </strong>: maggiore e minore. Questi operatori servono per aumentare o diminuire il contributo alla rilevanza di una specifica parola. L&#8217;operatore &gt; aumenta la rilevanza mentre &lt; la diminuisce. Vedere gli esempi per una maggiore comprensione.<br />
<strong> ~ </strong>: il carattere tilde funge come operatore negativo, in quanto una parola preceduta da esso, se individuata nella riga, contribuirà ad abbassare la rilevanza. Da non confondersi con l&#8217;operatore -, in quanto tilde diminuisce la rilevanza ma non esclude la riga dal risultato.<br />
<strong>&#8220;</strong>: doppio apice. Questo operatore serve ad eseguire la query cercando letteralmente quello che è contenuto al suo interno.</p>
<h2>Esempi</h2>
<p>I seguenti esempi dovrebbero chiarire le spiegazioni del paragrafo precedente:</p>
<ul class="listato">
<li>&#8216;apple banana&#8217;<br />
Trova delle righe che contengano almeno una di queste parole.</li>
<li>&#8216;+apple +juice&#8217;<br />
Trova righe che contengano entrambe le parole.</li>
<li>&#8216;+apple macintosh&#8217;<br />
Trova righe che contengano la parola &#8216;apple&#8217; la cui importanza sale se contengono anche &#8216;macintosh&#8217;.</li>
<li>&#8216;+apple -macintosh&#8217;<br />
Trova righe che contengono &#8216;apple&#8217; E che NON contengono &#8216;macintosh&#8217;.</li>
<li>&#8216;+apple ~macintosh&#8217;<br />
Trova righe che contengono “apple”, e che in caso contengano la parola “macintosh”, diminuisce la loro rilevanza rispetto ai risultati che non la contengono. Questo è un metodo meno di impatto della ricerca &#8216;+apple -macintosh&#8217;, in quanto la presenza di “macintosh” fa in modo che la riga non sia affatto nel risultato.</li>
<li>&#8216;+apple +(&gt;turnover &lt;strudel )&#8217;<br />
Trova delle righe che contengono “apple” e “turnover”, o “apple” e “strudel” (in qualsiasi ordine), ma da  maggiore rilevanza a “apple turnover” piuttosto che “apple strudel”.</li>
<li>&#8216;apple*&#8217;<br />
Trova righe che contengono parole come “apple”, “apples”, “applesauce”, or “applet”.</li>
<li>&#8216;&#8221;some words&#8221;&#8216;<br />
Trova righe che contengono l&#8217;esatta frase  “some words” (ad esempio, la riga potrebbe contenere “some words of wisdom” ma non “some noise words”). Da tenere presente che il carattere doppio apice “&#8221;” che racchiude la frase sono degli operatori che delimitano la frase. Non sono apici che delimitano la frase nel risultato.</li>
</ul>
<h2>Stopwords</h2>
<div style="border:0px solid black; width:100%; height: 480px; clear: both;">
<div style="border:0px solid green; width:67%; float:left;">Il termine <strong>stopwords</strong> è stato coniato da Hans Peter Luhn, sta ad indicare quelle parole in cui il processo di archiviazione si ferma, salta la parola &#8220;inutile&#8221; e riprende.<br />
Alcuni motori di ricerca, infatti, non salvano alcune parole estremamente usate nel loro indice in modo tale da salvare spazio su disco.<br />
Considerate la seguente frase:</p>
<blockquote><p>&#8220;The way to the school is long and hard when walking in the rain.&#8221;</p></blockquote>
<p>Il &#8220;The&#8221; appare tre volte. Per salvare spazio su disco, questa parola potrebbe essere sostituita da un marcatore. La frase potrebbe essere quindi così salvata:</p>
<blockquote><p>* way to * school is long and hard when walking in * rain.</p></blockquote>
<p>Potete trovare la lista delle <strong>stopwords</strong> nelle varie lingue su questo sito <a href="http://www.ranks.nl/stopwords" target="_blank">http://www.ranks.nl/stopwords</a>.</p>
</div>
<div style="border:0px solid red; width:auto;"><a class="images" href="http://razorblade.netsons.org/wp-content/stopword.jpg"><img title="stopword" src="http://razorblade.netsons.org/wp-content/stopword.jpg" alt="stopwords" width="157" height="250" /></a></div>
</div>
<h2>Riferimenti</h2>
<p><a href="http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html" target="_blank">Manuale di MySql</a></p>
<div class="ratings">Note: There is a rating embedded within this post, please visit this post to rate it.</div>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://razorblade.netsons.org/2008/07/15/mysql-ricerca-full-text/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
