Sto cercando di ottenere un punteggio per l'intera sezione delle istruzioni SELECT
SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
In tal caso i punteggi sono per tabella + non sono ordinati per rilevanza
Ma ho provato questo metodo, che funziona ma non vale la produzione
SELECT * FROM (
SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
) as `combined` ORDER BY `score` DESC
Il codice sopra non è apprezzato perché i punteggi sono presenti per tabella, vengono uniti e ordinati. Un cattivo approccio.
Così ho cercato di MATCH() AGAINST()
per data
in PRIMO LIVELLO SELEZIONE pure questo. (DIDN'T WORK)
SELECT *,MATCH(`data`) AGAINST('keyword') as `good_score` FROM (
SELECT *,`result` as `data`,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,`content` as `data`,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,`text` as `data`,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
) as `combined` ORDER BY `good_score` DESC
L'istruzione precedente è perfetta per me, ma non funziona perché la data
colonna viene creata al volo e non supporta l'indice FULLTEXT.
La mia domanda è come procedere per far funzionare il mio motore.
- Puoi in qualche modo fare
data
un FULLTEXT - Esiste un modo per farlo funzionare diverso da IN BOOLEAN MODE che non supporta i punteggi
- C'è un approccio a questo intero argomento che potrebbe farlo funzionare? La creazione di una tabella temporanea non risolve questo problema, la regola del 50% di MATCH () CONTRO () fa sì che una query restituisca 0 risultati, ma ci sono molti
- Forse c'è qualcosa di poco che mi manca?
- La creazione di una VISTA non funziona neanche, MySQL non supporta INDEX-es su VISUALIZZAZIONI.
- Forse è una buona idea usare IN MODALITÀ BOOLEANA e creare il punteggio manualmente?
Ho lavorato per questo problema per più di due giorni. Quindi chiedo gentilmente un aiuto. Grazie.