Newsgroup: it.comp.www.asp
Titolo: Motore di ricerca con percentuale di match

Volendo ricercare qualcosa in un db, mi sono sempre basato sull'ordinamento
in base ad uno o più campi.
Un risultato di questo tipo, però, non è del tutto esatto, perché non
rispetta la reale percentuale di match di quello che si è cercato.
Ad es. se cerco la parola XYZ in una tabella composta da più campi, e la
trovo in due di questi, deve, o meglio dovrebbe, ordinarla non in ordine
alfabetico, ma a seconda di quante volte compare XYZ!
Finora ho pensato di lavorare in due tempi: la ricerca sul db, ordinata
alfabeticamente, e l'ordinamento in base al match, utilizzando le regexp e
lavorando sui vettori. Una soluzione di questo tipo, però, impiega un tempo
pressoché uguale a quello di ricerca del motore db per recordset di max 50
record con 10 campi di testo medio-lunghi, ma aumenta esponenzialmente
all'aumentare dei record. :-(
Non c'è modo di far fare la ricerca del match direttamente nel db?
Avete in mente altre soluzioni?
--
Ciao,
   Filippo Di Blasi 
fil...@puntoinformatico.it
   Webmaster(at) 
www.puntoinformatico.it
 <--- NEW!

Non so di cosa stiamo parlando, se sql server order by count(tuocampo) desc
funziona, dubito con access (mai provato)

 se sql server order by count(tuocampo) desc
Mmh... sicuro di aver capito bene la mia domanda?


 writes:
FDB> Non c'è modo di far fare la ricerca del match direttamente nel db?
FDB> Avete in mente altre soluzioni?
Non lo so, ma non mi pare che i db relazionali siano nati con questo
scopo. Se hai bisogno di un motore di ricerca, perché non ti rivolgi
all'open source ?
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )

> Mmh... sicuro di aver capito bene la mia domanda?
forse no...
non riesco a testarlo, ma se ordini per il totale delle parole trovate non
va bene?
del tipo
.....where tuocampo like '%tuaparola%' order by count(case when
charindex('tuaparola',tuocampo)=0 then 0 else 1 end)
Ovviamente al count ci devi aggiungere anche la somma dell'altro campo...

 all'open source ?
Spesso ho la necessità di interrogare db relazionali e avere risultati di
questo tipo.
A me interessa, per adesso, una soluzione esclusivamente interna al db.


 charindex('tuaparola',tuocampo)=0 then 0 else 1 end)
L'ho testato, ma torna sempre 1 :-(((


Su it.comp.software.database mi hanno risposto che LIKE si ferma alla prima
occorrenza trovata:
ecco il motivo per cui torna sempre uno il COUNT!


certo, ma non in campi diversi...
da quel che ho letto hai scritto che la stessa parola puň apparire in piů
campi, non piů volte nello stesso campo!
Se parliamo di piů volte nello stesso campo mi sa che non c'č modo (con
sql2000 puoi scriverti una function che ti restituisce il numero di volte
che compare nella stringa, e poi includere la function nella query)

 che compare nella stringa, e poi includere la function nella query)
Col 7 e SP varie no? :-(


No, è una delle novità di sql 2000

> all'open source ?
FDB> Spesso ho la necessità di interrogare db relazionali e avere risultati di
FDB> questo tipo.
Hmmm... Probabilmente dando un occhio a come funziona HTDig puoi farti
venire delle  idee. So  che usa degli  indici, probabilmente  riesci a
trovare il modo di fare quelle indicizzazioni anche nel DB.
