2012-05-09 11 views
6

Ho una tabella places(name vachar(50), address text, description text) engine = MYISAM e pochi record.MySQL: Qualcosa non va con la ricerca di testo completo - Restituzione senza risultati

Ho cercato di fare un esempio in here! E cercare il "problema di testo completo", ma non ho chiarito la ricerca di testo completo.

In primo luogo, aggiungo un indice full-text da:

ALTER TABLE places ADD FULLTEXT(name, address, description); 

e cercare mySQL:

SELECT * FROM places WHERE MATCH(name,address,description) AGAINST('my search key'); 

ho provate un po 'la mia chiave di ricerca' che il contenuto è in molti campi, ma ci sono in alcuni casi:

  • ora riga selezionata.

  • se provo add option "IN BOOLEAN MODE" in AGAINST(), risultato ottenuto con punteggio = 1, non ha senso quando lo ordino.

  • mostra solo il risultato quando il "tasto di ricerca" ha contenuto nel campo (nome).

Ho provato un modo molto, ma non mi ricordo tutti i casi,

Qualsiasi risposta potrebbe aiutare!

Grazie in anticipo!

+0

Qual è la tua parola chiave? http://dev.mysql.com/doc/refman/5.1/en/fulltext-stopwords.html –

+0

grazie a Marcus, il mio problema nella chiave di ricerca con stop_word e il valore predefinito ft_min_word_len. – dorign

+0

Freddo.Ho aggiornato il titolo della domanda per chiarire e ho aggiunto una risposta. –

risposta

5

Assicurarsi che la parola chiave non sia stop word. Per disable or modify the stop word list, è necessario accedere per impostare le variabili di sistema e riavviare il server.

Inoltre, assicurarsi che la parola chiave corrisponda allo minimum full text word length. La lunghezza minima predefinita è 4.

Infine, assicurarsi che la parola venga visualizzata in meno del 50% dei record. MySQL non restituirà risultati in cui la parola appare nel 50% o più dei record.

+0

O.M.G. !!! Ho provato per un'ora su un tavolo da 2 record. @ * & $ #%^$%! +9001 - e no non vedo la parola 'percent''% 'nella documentazione: https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html – ebyrob

1

Oltre a Marcus' risposta:

Quando ho iniziato con gli indici FULLTEXT in MySQL, ho avuto problemi con i risultati vuoti - ero evitando parole stop ed è stato utilizzando anche quelli abbastanza a lungo, quindi ero testa- graffiare un po 'fino a quando ho trovato questo sepolto nel MySQL documentation:

la soglia del 50% ha un'implicazione significativa prima volta che si tenta ricerca full-text per vedere come funziona: se si crea una tabella e inserire solo uno o due righe di testo in esso, ogni parola nel testo si verifica in almeno il 50% delle righe. Di conseguenza, nessuna ricerca restituisce alcun risultato. Assicurati di inserire almeno tre righe, e preferibilmente molte di più. Gli utenti che hanno bisogno di bypassare il limite del 50% è possibile utilizzare la modalità di ricerca booleana

Questo spiega anche il motivo per cui avete ottenuto risultati (ma con un punteggio "senza senso") quando si imposta la query di operare in BOOLEAN MODE

+0

+1 per essere colui che ha trovato questo. E i miei complimenti per aver segnalato l'oscura posizione della documentazione. Anche se giuro su tutti che è ancora Oracle che la modalità booleana non funzionava fino a ** dopo ** ho letto questa pagina. Ma forse quella era solo la mia propensione a cercare cose come 'foo' inizialmente ... Voglio dire, il mio ULTIMO NOME è di 3 lettere. – ebyrob

Problemi correlati