Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    369

    Ricerca full-text fa i capricci

    salve, mi capita una cosa strana.

    io ho 2 record in un database mysql molto simili

    nome = Riassunto sull'Islanda
    nome = Riassunto sull'Italia

    quando faccio la ricerca (full-text) se scrivo la parola islanda mi trova 1 risultato (il primo), se scrivo la parola italia mi trova 0 risultati....come mai non trova il secondo??

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    369
    credo di aver capito : la ricerca full-text non separa le parole in presenza di apostrofi...bella fregatura...

    io per risolvere avrei pensato ad un modo, ma rischia di far arrivare i tempi di ricerca molto molto lunghi se ci sono un numero elevato di risultati trovati...quindi io vi esprimerei la mia soluzione e vi chiedrei se potreste dirmi a stima fino a quanti risultati questa soluzione risulterebbe performante.

    Io faccio la ricerca full text normale e stampo i risultati.

    Poi faccio un'altra ricerca, questa però fatta con like (così trova anche le soluzioni con l'apostrofo, ma non le ordina per coerenza)

    A questo punto per ogni soluzione trovata con while faccio il confronto del suo id con tutti gli id trovati con full-text...se nessun confronto mi da uguaglianza, allora stampo in fondo ai risultati precedenti il record, sennò passo al successivo.

    Così alla fine di tutto avrei tutti i record trovati con full-text ordinati per coerenza e in fondo tutti quelli con like.

    Il problema è che se la mia ricerca trovasse 200 risultati (sia con f-t che con like) il mio script deve :

    - stampare 200 risultati
    - per ognuno dei 200 fare il controllo dell'id con gli altri 200
    - stampare eventuali id nuovi (che nell'esempio non ci sono)

    capite che il punto 2 è decisamente troppo lungo....credo almeno

  3. #3
    penso non trovi nessuna delle due. Probabile che la parola completa sia "sull'Islanda"


    @ edit.... lo hai visto da te.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    369
    eheh si scusa mi sono accorto in ritardo...commenti sul mio metodo?

    secondo te potrebbe non dare problemi fino a quanti record con un pc normale del giorno d'oggi?

  5. #5
    Originariamente inviato da alfa_19
    eheh si scusa mi sono accorto in ritardo...commenti sul mio metodo?

    secondo te potrebbe non dare problemi fino a quanti record con un pc normale del giorno d'oggi?
    commenti... se il campo "nome" contiene poche stringhe non serve granche' fare un match ... against. Oltretutto ci sono una pletora di limitazioni tra parole brevi, stop words, numerosita' del termine... e funziona solo con le MyIsam.

    Nel caso specifico del nome con apostrofo ora capisci perche' in molti casi trovi uno spazio la in mezzo... "dell' Italia" brutto da vedersi ma funzionale.
    codice:
    update .... set campo = replace(campo, '\'', '\' ')
    quota il post per capirci qualcosa su questi apici

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    369
    mmm, però i campi su cui faccio la ricerca sono molto ampi...uno addirittura arriva fino a 2000 caratteri...quindi mi serve la full-text

    stavo pensando di creare una copia del campo nel database, dove inserisco le stesse stringhe dei campi originali ma sostituisco i caratteri speciali con spazio....a prestazioni non peggiora di molto, quali sarebbero in questo caso le controindicazioni?

  7. #7
    Originariamente inviato da alfa_19
    mmm, però i campi su cui faccio la ricerca sono molto ampi...uno addirittura arriva fino a 2000 caratteri...quindi mi serve la full-text

    stavo pensando di creare una copia del campo nel database, dove inserisco le stesse stringhe dei campi originali ma sostituisco i caratteri speciali con spazio....a prestazioni non peggiora di molto, quali sarebbero in questo caso le controindicazioni?
    piu' che duplicare il campo potresti creare un campo con le keywords del record. Tieni anche presente tutti i limiti di match .. against

    http://dev.mysql.com/doc/refman/5.0/...xt-search.html

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    369
    eh ma come faccio a identificare le keywords? potrebbe esserci scritto qualsiasi cosa in quel record

  9. #9
    Originariamente inviato da alfa_19
    eh ma come faccio a identificare le keywords? potrebbe esserci scritto qualsiasi cosa in quel record
    beh! lo devi sapere tu quali sono le keywords adeguate. Non credo si possa fare in automatico.

    Aggiorna il tuo campo con la query update suggerita sopra, poi togli lo spazio, allo stesso modo in cui lo hai messo, quando si trattera' di stampare la stringa.

    Tieni anche presente che l'elenco delle stop words e' in inglese e quindi non funziona con l'italiano. Gia' eliminando tutte le parole italiane di questo elenco ridurresti i tempi di ricerca.

    http://dev.mysql.com/doc/refman/5.0/...stopwords.html

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.