Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    come impostare la ricerca di un search-engine??!!

    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!!!
    www.skorpiograph.com - [ PORTFOLIO ]
    ...se vuoi essere aiutato devi aiutare chi ti aiuta ad aiutarti!!!

  2. #2
    up!!
    www.skorpiograph.com - [ PORTFOLIO ]
    ...se vuoi essere aiutato devi aiutare chi ti aiuta ad aiutarti!!!

  3. #3
    diciamo che ho letto per keyword...
    dovevi impostare una ricerca anche su quello che hai scritto in questo post

    io ti consiglio di dare uno sguardo a qualche funzione di mysql
    find_in_set

    full-text search functions

    forse puoi trovare qualche risposta

    E' la mia opinione ed io la condivido
    Non condivido la tua idea ma darei la vita perché tu la possa esprimere (Voltaire)
    Scrivi sul muro

  4. #4
    vado a leggere.............
    www.skorpiograph.com - [ PORTFOLIO ]
    ...se vuoi essere aiutato devi aiutare chi ti aiuta ad aiutarti!!!

  5. #5
    Originariamente inviato da boomboom69
    diciamo che ho letto per keyword...
    dovevi impostare una ricerca anche su quello che hai scritto in questo post :
    :gren: lunghetto vero?? :gren:
    www.skorpiograph.com - [ PORTFOLIO ]
    ...se vuoi essere aiutato devi aiutare chi ti aiuta ad aiutarti!!!

  6. #6
    ciao bb69 sto iniziando a leggere (ma è in inglese e non è che lo mastico poi molto azz!!)

    in ogni caso per lo meno ci provo.

    Comunque tu credi che con la soluzione che ho trovato/escogitato vada male??? e sempre se non ti faccio perdere troppo tempo, mi spiegheresti il perchè!!??

    ciao
    www.skorpiograph.com - [ PORTFOLIO ]
    ...se vuoi essere aiutato devi aiutare chi ti aiuta ad aiutarti!!!

  7. #7
    provo ad uppare??!!
    www.skorpiograph.com - [ PORTFOLIO ]
    ...se vuoi essere aiutato devi aiutare chi ti aiuta ad aiutarti!!!

  8. #8
    Originariamente inviato da CeMax-2000
    ciao bb69 sto iniziando a leggere (ma è in inglese e non è che lo mastico poi molto azz!!)

    in ogni caso per lo meno ci provo.

    Comunque tu credi che con la soluzione che ho trovato/escogitato vada male??? e sempre se non ti faccio perdere troppo tempo, mi spiegheresti il perchè!!??

    ciao
    a saperlo
    non ho mai fatto un motore di ricerca interno cmq ti ho suggerito quei tipi di ricerca perché
    FIND_IN_SET ti permette di ricercare direttamente in quelle stringhe che ti salvi

    FULL-TEXT perché ne parlo bene Fabio Heller tempo fa per le ricerche ma non ricordo l'argomento
    E' la mia opinione ed io la condivido
    Non condivido la tua idea ma darei la vita perché tu la possa esprimere (Voltaire)
    Scrivi sul muro

  9. #9
    Ah!! ok lo dicevo io che di inglese non ne capisco una Valeria (ma**a) :gren:

    Vuol dire che mi rileggerò tutto con più calma ma domani che oggi non ne ho più voglia.

    Senti bb69 non è che per caso potresti accennarmi un fac simile di query?????

    Grazie ancora per le risposte!! :metallica
    www.skorpiograph.com - [ PORTFOLIO ]
    ...se vuoi essere aiutato devi aiutare chi ti aiuta ad aiutarti!!!

  10. #10
    Ok me lo sono riletto per bene (credo!!??) e questo pezzo è quello che mi serve giusto??:

    FIND_IN_SET(str,strlist)
    Returns a value 1 to N if the string str is in the string list strlist consisting of N substrings. A string list is a string composed of substrings separated by `,' characters. If the first argument is a constant string and the second is a column of type SET, the FIND_IN_SET() function is optimized to use bit arithmetic. Returns 0 if str is not in strlist or if strlist is the empty string. Returns NULL if either argument is NULL. This function will not work properly if the first argument contains a comma (`,') character. mysql> SELECT FIND_IN_SET('b','a,b,c,d');
    -> 2



    e quindi se ho interpretato giusto.....:
    1 - anzichè separare le singole parole con il carattere "|", le dovrei separare con la ", (virgola)" giusto??
    2 - i risultati che torna sono :
    • 0 se la stringa o parola cercata è vuota o se non è presente nel campo indicato per la ricerca;
    • da 1 a N naturalmente se trova la parola. Più precisamente indica il numero corrispondente della parola esaminata nella substring che corrisponde a quella usata per la ricerca!!


    Solo non ho capito se:
    • una volta trovata almeno una corrispondenza perchè soddisfatta la query, si ferma oppure continua a cercare??? Sarebbe utile per vedere quante ce ne sono in ogni substring!!
    • non ho neanche capito se posso cercare più parole insieme ed eventualmente come fare oppure se devo fare tante query quante sono le parole da cercare!!!
    • inoltre se per primo trova subito una virgola la funzione si ferma subito e non continua oppure da proprio un'errore??
    • il campo dove faccio la ricerca deve avere un campo particolare o va bene un LONGTEXT???
    • mi spieghi questo:
      If the first argument is a constant string and the second is a column of type SET, the FIND_IN_SET() function is optimized to use bit arithmetic.



    grazie ancora per il tuo aiuto!!!
    :metallica
    www.skorpiograph.com - [ PORTFOLIO ]
    ...se vuoi essere aiutato devi aiutare chi ti aiuta ad aiutarti!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.