Newsgroup: it.comp.www.php
Titolo: Motore di ricerca in PHP e Mysql


free software&GNU/Linux 4ever! ;-)
            _           _        _          
 _ __  __ _| |_ _ _ ___| |__ _ _(_)_ ____ _ 
| '  \/ _` |  _| '_/ _ \ '_ \ '_| \ V / _` |
|_|_|_\__,_|\__|_| \___/_.__/_| |_|\_/\__,_|
 
 

 risorse in rete? Che metodo devo usare?
 
 
dai un occhio a lucene (e derivati) o sphinx
 


+1
http://lucene.apache.org/solr/tutorial.html
 
 
-- 
I cosi mi fattano


Sarebbe stupendo, proprio quello che mi serve ma c'è un problema: sul
mio server locale tutto ok, ma sto lavorando in remoto su un server di
Altervista dove non posso eseguire software Java.

cerco Divvina Comedia apparirà sempre l'opera di Dante.
 
Questo è più complesso. Prima di tutto dovresti farti un elenco con
*tutte* le parole e frasi che compaiono nei tuoi documenti. Quindi,
dall'elenco puoi espungere parole e frasi troppo comuni (articoli e
congiunzioni e...). Infine elimini parole e frasi che non compaiono
abbastanza di frequente.
 
Alla fine ti trovi un tabellone "keywords" che contiene diciamo una
mezza milionata di sequenze valide.
 
Arriva un tizio che cerca 'Divvina Commedia', puoi tentare approcci
diversi.
 
Per esempio con MySQL usare in query la funzione di Levenshtein (ma
con molte keyword ti costa l'osso del collo):
 
 
http://www.artfulsoftware.com/infotree/queries.php#552
 
 
oppure un approccio à la Soundex, archiviando sia la keyword sia un
codice pseudo soundex (o anche il Soundex classico):
 
	Divina Commedia  => DIVIMA COMEDIA oppure DIVMA COMEDIA
	Divvina Commedia => DIVIMA COMEDIA " "
 
(Qui ho eliminato le doppie, unito M e N e altri errori tipografici
che in 'Divina Commedia' non apparirebbero. Se ho una sequenza piu'
lunga di due caratteri dove si ripetono due soli caratteri converto
in una sequenza dei due caratteri in ordine alfabetico: per cui che
io scriva Divina, Diivna, Dvina, Divna, Dviina, ho sempre DIVMA. Se
scrivi "iDvina" fallisce, e appare Jobs a riempirti di nocchini).
 
Tutto cio', ovviamente SE E SOLO SE la query "normale" non pesca, o
pesca poco. In quel caso puoi dire all'utente:
 
	Divvina Commedia: volevi scrivere "Divina Commedia"?
 
oppure
 
	"Divvina Commedia" non dà risultati. Ecco i risultati per
	"Divina Commedia"      (Cerca proprio "Divvina Commedia")
 
(ogni somiglianza con motori di ricerca esistenti è casuale <g>)
 
Leonardo
 
-- 
Tell us whether you spy, in the light of the morn,
what saluted was fiercely at the fall of the past day:
whose pips and whose bands in the very heart of the fray
bravely floated from the bulwarks to which we were sworn?


Non è strettamente necessario che solr giri sullo stesso server. 
Sicuramente le funzionalità di ricerca che ti servono se mimate in php 
difficilmente saranno flessibili e performanti come vorrai.
 
M
 
-- 
I fatti mi cosano


Perfetto, la terza soluzione mi sembra la migliore:
utilizzando le prime due funzioni che hai citato dovrei utilizzare
decisamente troppe risorse del server (che tra le altre cose � su
Altervista)...
Invece, l'idea della somiglianza con Big G mi sembra ottima, potrei fare
che se non pesca nessun risultato mi indichi... cosa? Come faccio
utilizzando query SQL a far suggerire ad una macchina quello che ha pi�
risultati?
Ad esempio, se cerco Divvina Commedia potrebbe suggerirmi una qualunque
voce che ha pi� risultati di Divvina Commedia.
Forse spezzettando la query con le regex in blocchi proporzionali al
numero di caratteri inseriti e indicare la ricerca che ha pi� query?
 
 

numero di caratteri inseriti e indicare la ricerca che ha più query?
 
Ti conviene di piu' dividere in parole - e magari omettere parole che
significano poco, tipo gli articoli etc.
 
Per cui se uno cerca "La Divvina Commedia", gia' cosi' ricercherai la
parola "Commedia" e qualcosa trovi.
