Qualsiasi esperto di MySQL a tutto testo?MySQL Join e ricerca full text
Ho scritto una domanda ieri per chiedere suggerimenti su come utilizzare la ricerca full-text con un sacco di join, un po 'pigramente, non avevo ancora fatto un tentativo.
Da allora, ho avuto un buon tentativo di padroneggiarlo da solo, costruendo alcune query di prova con successo, contro i miei campi full-text. Se NON utilizzo alcun join e non eseguo query singolarmente su ogni campo, le funzioni full-text funzionano perfettamente e pertinenza/booleano funziona alla grande anche con grandi prestazioni ... ma ... non appena aggiungo i miei join per eseguire la query completa , corre per sempre.
Qualcuno può individuare qualcosa nella mia domanda che potrebbe causare ciò, perché come un dilettante, davvero non riesco a vederlo!
SELECT
photos.photoID,
photos.headline,
photos.dateCreated,
MATCH (people.people) AGAINST ('+sarah +harding' IN BOOLEAN MODE) AS Rel1
FROM photos
LEFT JOIN (photoPeople INNER JOIN people ON photoPeople.peopleID = people.PeopleID)
ON photos.photoID = photoPeople.photoID AND MATCH (people.people) AGAINST ('+sarah +harding' IN BOOLEAN MODE)
WHERE
photos.photoStatus = 'Live'
GROUP BY
photos.photoID
ORDER BY Rel1
Questo è uno dei miei successo, i singoli, le query:
SELECT
photoID,
headline,
dateCreated,
MATCH (caption) AGAINST ('+sarah +harding' IN BOOLEAN MODE) AS Relevance
FROM photos
WHERE
photoStatus = 'Live'
AND
MATCH (caption) AGAINST ('+sarah +harding' IN BOOLEAN MODE)
ORDER BY Relevance
Questo è lo schema DB:
photos (tbl)
photoID INT(11) Primary Auto-Increment
headline Long-Text
caption Long-Text/FULLTEXT
dateCreated DateTime
people (tbl)
peopleID INT(11) Primary Auto-Increment
people VarChar(255)/FULLTEXT
photoPeople (tbl)
photoID INT(11)
peopleID INT(11)
keywords (tbl)
keywordID INT(11) Primary Auto-Increment
keyword VarChar(255)/FULLTEXT
photoKeyword (tbl)
photoID INT(11)
keywordID INT(11)
photoContributor (tbl)
photoID INT(11)
contributorRef VarChar(100)/FULLTEXT
E questa è la mia stampa SPIEGARE out:
id select_type table type possible_keys key key_len ref rows 1 SIMPLE photos ALL NULL NULL NULL NULL 89830 1 SIMPLE photoContributor ALL NULL NULL NULL NULL 149635 1 SIMPLE photoPeople ALL NULL NULL NULL NULL 110606 1 SIMPLE people eq_ref PRIMARY PRIMARY 4 1 1 SIMPLE photoKeyword ALL NULL NULL NULL NULL 699102 1 SIMPLE keywords eq_ref PRIMARY PRIMARY 4 1
Il visitatore del mio sito web dovrebbe essere in grado di cercare: "Brad Pitt Angelina Jolie Dorchester Hotel Sunglasses @MG" - Questo dovrebbe trovare "Brad Pitt" e "Angelina Jolie" dal tavolo "people.people" e probabilmente anche dal tavolo "photos.caption". Dovrebbe anche trovare "Dorchester Hotel" dalla tabella "photos.caption", "Sunglasses" dalla tabella "keywords.keyword" e infine, dovrebbe trovare "@MG" nella tabella "photoContributor.contributorRef".
Qualsiasi aiuto su questo sarebbe ben accetto ...
Aggiungi 'EXPLAIN SELECT ...' alla tua domanda – sanmai
Per avere un riferimento, se si sta espandendo su una questione, senza modificare le informazioni di base richiesto, allora si dovrebbe solo modificare l'originale, piuttosto che ripartire. – Orbling
È necessario incollare lo schema per queste tabelle (il risultato delle query 'SHOW CREATE TABLE' dovrebbe andare bene). Inoltre, per essere chiari, sembra che tu stia usando l'indicizzazione fulltext di MyISAM? – TehShrike