Allora volevo un vostro pare e magari anche un'aiuto su come fare.
Vi anticipo subito che sarà un pochino lunghetto ma per spiegare bene quello che mi occorre l'ho dovuto fare.....
Vi spiego meglio:
ho una tabella in cui inserisco delle news ed altri valori correlati ad essa (vi dico solo i più importanti tanto per allegerire....).
Campi:
- ora news (in cui inserisco il valore della data ora in formato timestamp/php)
- titolo_news (non credo ci sia bisogno di spiegazioni)
- corpo_news (idem non richiede spiegazioni)
- index_titolo_news (dove inserisco l'indicizzazione del titolo)
- index_corpo_news (dove inserisco l'indicizzazione della news)
n.b. L'indicizzazione è in pratica una operazione che tramite script/php effettuo per eliminare le parole che ai fini della ricerca
sarebbero inutili (vedi: quando, come, perchè, chi, eccetera.....), insomma tutte quelle parole che si usano normalmente in un discorso e che quindi non sono caratteristiche della news stessa.
Quindi dopo aver eliminato queste parole elimino le parole incontrate nel testo della news per più di una volta!!
Alla fine ottengo un'elenco di parole (significative) che inserisco nell'apposito campo nel seguente modo:
parola_1|parola_2|parola_3|parola_4|parola_5|parol a_6 ecc.....
Pertanto per fare un'esempio se io nella news ho una frase del tipo:
Ciao topolino come stai?? hai dormito bene?? e topolino rispose a pippo: no perchè ho fatto sesso tutta la notte con la cugina di minni ed ora sono preoccupato perchè se minni lo viene a sapere come minimo mi taglia il coso!!! [n.d.r. mode](minchia che immaginazione!!!?? dovrò incominciare a preoccuparmi??? :gren: )[/n.d.r. mode]
.................stavo dicendo che con una frase del genere otterrò una stringa definita in questo modo:
Ciao|topolino|dormito|bene|rispose|pippo|fatto|ses so|notte|cugina|minni|preoccupato|viene|sapere|min imo|taglia|coso
editato: (non ho capito perchè li manda a capo spezzando le parole???!!)
insomma credo di essermi spiegato bene (credo). Lo stesso discorso vale per il titolo.
Allora questo lungo prologo per introdurvi la mia vera domanda è terminato e quindi veniamo al dunque.
Da quella stringa che poi abbiamo inserito nel campo index_corpo_news io devo effettuare le ricerce tramite motore di ricerca.
Intanto vi dico subito che le parole da cercare possono essere più di una (ma su questo non c'è problema, mi arrangio splittando le parole).
La ricerca potrà avvenire combinata con questi parametri:
Ricerca semplice: cerco almeno una delle parole indicate;
Ricerca avanzata: cerco la news che contenga tutte le parole indicate in modo preciso .
ed ancora:
Ricerca sia nel titolo che nel corpo;
Ricerca solo nel corpo della news.
continua con:
Ricerca nella categoria di appartenenza della news
ed infine (e qui sta il punto....):
ricerca per data (dal..../al....)
Detto anche questo, il succo del discorso vero e proprio è:
Come mi consigliate di iniziare a scartare????? o meglio ditemi se quello a cui ho pensato io vi sembra corretto o meno ed eventualmente consigliatemi quale soluzione sia la migliore.
Io personalmente lo vedrei così:
Prendo prima di tutto la parola o le parole che l'utente ha inserito e che intende ricercare (se più di una ne faccio un'array) e verifico se queste parole esistono all'interno dell'array che contiene le parole (che mi sono creato nel frattempo con la funzione explode() dal campo che contiene l'indicizzazione del corpo).
Ogni volta che una parola corrisponde, prendo l'id della news corrispondente e la inserisco in un'altro array.
Tramite quest'ultimo array rieffettuo una nuova query al database selezionando prima di tutto solo ed esclusivamente le news che hanno come id, l'id indicato dall'array stesso.
Ovviamente questa seconda query sarà accompagnata eventualmente (dipende da che tipo di ricerca intende effettuare l'utente...) da altre condizioni che potranno variare.
Questo metodo a me sembra buono ma credo che lo sia se al massimo arriviamo a (secernere i risultati della prima query) un migliaio di record o giù di lì ma.............., azz c'è sempre un ma!!!
E se i record fossero un milione????? (non è solo un'ipotesi considerando che si tratta di una agenzia di stampa!!!) dopo qualche mese potrei avere un numero spropositato di news che non verranno mai eliminate dal db in quanto costituiscono un'archivio molto importante di dati!!!!
Quanto tempo potrebbe impiegare il php a verificare (tramite la funzione in_array()) l'esistenza di quelle parole che sto cercando in ogni record???? In ogni record(array) ci potrebbero essere anche un migliaio di parole!!!!!!
Quindi ad esempio se io ricerco quattro parole ben precise su mille record, e questi mille record hanno tutti una stringa (array) con almeno mille parole andrò ad usare per ben quattro milioni di volte la funzione in_array()?????!!!!!!! lo fondo!!!!
Purtroppo però credo che sia l'unica, possibilità che ho, ma (l'ho detto io che c'è sempre un ma!! :gren: ), lascio a voi l'incarico di darmi qualche dritta ed anche qualche consiglio!!!
Grazie a quanti avranno avuto il coraggio di leggere questo papiro!!!!
E Buona Domenica!!!