Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso manipolare la pertinenza della ricerca fulltext di MySQL per rendere un campo più "prezioso" di un altro?

Crea tre indici full-text

  • a) uno nella colonna delle parole chiave
  • b) uno nella colonna dei contenuti
  • c) uno nella colonna delle parole chiave e dei contenuti

Quindi, la tua domanda:

SELECT id, keyword, content,
  MATCH (keyword) AGAINST ('watermelon') AS rel1,
  MATCH (content) AGAINST ('watermelon') AS rel2
FROM table
WHERE MATCH (keyword,content) AGAINST ('watermelon')
ORDER BY (rel1*1.5)+(rel2) DESC

Il punto è che rel1 ti dà la pertinenza della tua query solo nella keyword colonna (perché hai creato l'indice solo su quella colonna). rel2 fa lo stesso, ma per il content colonna. Ora puoi sommare questi due punteggi di pertinenza applicando la ponderazione che preferisci.

Tuttavia, non stai utilizzando nessuno di questi due indici per la ricerca effettiva. Per questo, usi il tuo terzo indice, che si trova su entrambe le colonne.

L'indice su (parola chiave, contenuto) controlla il tuo richiamo. Alias, cosa viene restituito.

I due indici separati (uno solo sulla parola chiave, uno solo sul contenuto) controllano la tua pertinenza. E qui puoi applicare i tuoi criteri di ponderazione.

Tieni presente che puoi utilizzare un numero qualsiasi di indici diversi (oppure variare gli indici e le ponderazioni che utilizzi al momento della query in base ad altri fattori, forse... cerca solo per parola chiave se la query contiene una parola non significativa... diminuisci la distorsione di ponderazione per parole chiave se la query contiene più di 3 parole ... ecc).

Ogni indice consuma spazio su disco, quindi più indici, più disco. E, a sua volta, maggiore ingombro di memoria per MySQL. Inoltre, gli inserimenti impiegheranno più tempo, poiché hai più indici da aggiornare.

Dovresti confrontare le prestazioni (facendo attenzione a disattivare la cache delle query MySQL per il benchmarking, altrimenti i tuoi risultati saranno distorti) per la tua situazione. Questo non è efficiente per Google Grade, ma è abbastanza facile e "pronto per l'uso" ed è quasi sicuramente molto meglio del tuo uso di "mi piace" nelle query.

Trovo che funzioni davvero bene.