Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [MYSQL] Un motore di ricerca con FullText

    Leggendo l'articolo "Un motore di ricerca in PHP e MySQL" sto apprezzando l'utilità e la potenza di questo metodo.
    Due domande:
    Domanda 1:
    nel vostro articolo è presentato questo comando:
    ALTER TABLE table_name ADD FULLTEXT(field1, field2);
    ho fatto delle prove su una tabella di prova e dopo questa query, nel pannello di controllo di MYSQL leggo:
    field1 FULLTEXT Nessuno field1
    field2
    Ho provato ad eseguire lo stesso comando usando due differenti query
    ALTER TABLE table_name ADD FULLTEXT(field1);
    ALTER TABLE table_name ADD FULLTEXT(field2);
    ed ottengo quest'altra situazione:
    field1 FULLTEXT Nessuno field1
    field2 FULLTEXT Nessuno field2
    Le due situazioni sono equivalenti?

    Domanda 2:
    questo va bene se usata su una tabella. Ho fatto delle prove concrete del tipo:
    Codice PHP:
    $find "database query";
    $Query "SELECT * 
    FROM sql_articoli 
    WHERE MATCH(title,body) AGAINST ('"
    .$find."')
    "

    Avendo delle tabelle relazionate tra loro come posso eseguire ricerche FULLTEXT su più tabelle usando delle JOIN?
    E' sufficiente applicare il FULLTEXT anche a campi di altre tabelle?
    e poi nella WHERE MATCH(title,body) è possibile indicare i campi di tutte le tabelle coinvolte?

    Vi ringrazio per l'attenzione.
    Ultima modifica di micdas; 20-10-2015 a 00:49

  2. #2
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Sto studiando il problema, e l'ho risolto usando MariaDB e il plugin sphinx.
    Se non ti servono richieste in tempo reale, cioè puoi aggiornare ogni TOT l'indice full text, e "qualcuno" (tipo un sistemista) ti prepara l'ambiente, puoi fare query full text

  3. #3
    Ciao brancomat,
    Grazie per la risposta.
    Però non ho capito bene.
    Se mi suggerisci di migrare da MYSQL a MariaDB usando anche un plugin di terze parti, mi piacerebbe risolvere il problema rimanendo in MYSQL.
    Sono sicuro che ci sarà senz'altro una soluzione che avrò pazienza di attendere.


  4. #4

  5. #5
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Quote Originariamente inviata da micdas Visualizza il messaggio
    Ciao brancomat,
    Grazie per la risposta.
    Però non ho capito bene.
    Se mi suggerisci di migrare da MYSQL a MariaDB usando anche un plugin di terze parti, mi piacerebbe risolvere il problema rimanendo in MYSQL.
    Sono sicuro che ci sarà senz'altro una soluzione che avrò pazienza di attendere.

    Il problema, in generale, con mysql non lo puoi risolvere, perchè non ha un "vero" motore full text, che tra l'altro funziona solo con l'obsoletissimo myisam invece del ben più moderno (e sicuro) innodb.
    Dalle mie ricerche ne ho trovati due, di motori full text
    Uno è Lucene, ma sembra più facilmente interfacciabile con Java.
    L'altro si chiama sphinx, e si può interrogare sia "da solo", sia direttamente da mariadb (dopo avergli caricato il plugin).
    sphinx consente di fare ricerche "alla google" ed è davvero veloce.
    L'unico vero problema che ho riscontrato è che devi ricreare da capo gli indici ogni "tot" partendo da zero (e questo può richiedere anche un minuto o più).
    Ci sono anche indici "strani" autoaggiornanti, ma non ci ho capito praticamente nulla
    Nel mio programmello quando ho bidonato mysql a favore di mariadb+sphinx+(il sistemista che ha fatto funzionare il tutto) la vita mi si è semplificata un bel po'.
    Tanto da fare campi autocompilanti (PHP-ajax) veramente fichi, all'altezza della barra di ricerche google


    https://mariadb.com/kb/en/mariadb/about-sphinxse/

  6. #6
    Ciao brancomat
    ti ringrazio per le delucidazioni che mi hai dato.
    Purtroppo non me la sento di passare a mariaDB con o senza plug-in per il fatto che è da relativamente poco tempo che ho cominciato ad armeggiare col MYSQL ed ho creato ed elaborato diverse applicazioni.
    Cambiando ambiente dovrei cambiare tutto.
    Ti dirò che per semplificarmi la vita ho creato diverse funzioni e files da includere che praticamente mi fanno tutto:
    connessione al DB
    lettura del DB
    intabellazione automatica dei dati del recorcset
    restituzione dei dati in array mono multi dimensionali
    scrittura degli INSERT e UPDATE
    ecc
    per come sono impostate le applicazioni mi basta solo creare o modificare le query ed ho già tutto pronto sia per l'output che per gli aggiornamenti.

    Per quanto riguarda il motore di ricerca era solo un approfondimento che volevo fare per una interrogazione più intelligente del DB.

    Però data la struttura delle tabelle e cercando in giro ho visto che mi basta indicizzare una sola tabella (quella più ricca di campi e di informazioni) e lasciare le altre così come sono perchè contengono solo un tipo di dati.

    Detto questo basta solo creare una Query mista come queste due che ho trovato come esempi ma che ancora non ho ancora testato:

    Codice PHP:
    $Query "
    SELECT E.entryID, E.title, C.name
    FROM blog_entries AS E, blog_categories AS C
    WHERE E.categoryID=C.categoryID AND
    MATCH (E.title, E.entry) AGAINST ('michigan') AND E.categoryID=1;
    "
    ;


    $Query "
    SELECT E.entryID, E.title, C.name,
    MATCH (E.title, E.entry) AGAINST ('michigan') AS score
    FROM blog_entries AS E, blog_categories AS C
    WHERE E.categoryID=C.categoryID AND
    MATCH (E.title, E.entry) AGAINST ('michigan') AND E.categoryID=1;
    "


    Chiedo scusa per il trambusto che ho creato, ma è proprio grazie alle vostre risposte che ho potuto cambiare le mie ricerche su google e forse ho trovato la soluzione senza cambiare ambiente di lavoro.
    Ultima modifica di micdas; 21-10-2015 a 19:30

  7. #7
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Non dovresti cambiare nulla.
    MariaDB può sostituire "senza pietà" MySQL praticamente in ogni caso, senza dover far assolutamente nulla (anzi, in molte distro linux moderne MySQL non c'è più a favore di MariaDB).
    Nota che "maria" è il nome della figlia dell' inventore di MySQL, che ha fatto un fork, quindi è il "vero" MySQL.

    Per il resto fai come preferisci, ma per quanto ne so la ricerca full text di mysql fa proprio pena, e soprattutto funziona - come detto - SOLO sulle tabelle myisam (salvo smentite), che sono pessime per qualsiasi cosa (in particolare non ti consentono di fare i backup e i restore mentre vengono usate, più altre mille limitazioni che però non conosco bene).

    sphinx invece, con la sua interfaccia legata a MariaDB, lo usi da applicazione (tipo PHP) come fosse una normale tabella mysql.
    Ma forse mille volte più veloce in interrogazione, poi del tipo "google" (cerca pippo and pluto oppure pippo or pluto, o pippo e basta etc).

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.