2010-01-06 2 views
8

Devo eseguire una ricerca Fulltext per un intero gruppo di valori da una colonna in un'altra tabella. Poiché MATCH() richiede un valore nella parte AGAINST(), un semplice: "SELECT a.id FROM a, b WHERE MATCH (b.content) AGAINST (a.name)" non riesce con "Argomenti errati per AGAINST".MySQL Ricerca fulltext rispetto al valore della colonna?

Ora, so che potrei scrivere uno script per richiedere un elenco di nomi e quindi cercarli, ma preferirei elaborare una query più complessa che possa gestire tutto in una volta. Non ha bisogno di essere veloce, neanche.

Idee?

grazie

risposta

3

Purtroppo, http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html dice:

La stringa di ricerca deve essere un valore stringa che è costante durante la valutazione di query. Questo esclude, ad esempio, una colonna della tabella perché può differire per ogni riga.

Sembra che dovrai cercare gli schemi uno alla volta se utilizzi l'indice FULLTEXT di MySQL come soluzione di ricerca.

L'unica alternativa che posso pensare per consentire la ricerca di molti modelli come descrivi è un indice invertito . Anche se questo non è così flessibile o scalabile come una vera tecnologia di ricerca full-text.

Vedere la mia presentazione http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql

+1

Sì, ho visto che, ma http://dev.mysql.com/tech-resources/articles/full-text-revealed.html dice: "" L'argomento per CONTRO() deve essere una stringa costante. "Questo non è nulla di cui preoccuparsi. Non abbiamo ancora aggiornato il manuale per mostrare che l'argomento AGAINST() può essere una variabile o un parametro, se si utilizza MySQL versione 5." Speravo che qualcuno avesse qualche consiglio usando un tipo di approccio sql più complesso (viste, procedure o qualcosa del genere). In realtà, quello che sto facendo è fondamentalmente costruire un indice invertito di termini da una tabella che si verifica nella colonna di testo della tabella b. –

+1

Questo articolo è del maggio 2004, ma * ancora * non hanno aggiornato il manuale ?! È patetico! –

+0

Dice qualcosa sull'importanza del fulltext su mysql, suppongo. Mi sono ritrovato a studiare a Squid ultimamente, ma questo è un aspetto secondario di un progetto e non avevo alcuna intenzione di apportare modifiche sistemiche. –