Estoy tratando de obtener una puntuación para la sección completa de las declaraciones 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')
En tal caso, los puntajes son por tabla + no están ordenados por relevancia
Pero probé este método, que funciona pero no vale la pena producir
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
El código anterior no le gusta porque hay puntuaciones por tabla, se unen y se ordenan. Un mal enfoque.
Así que traté MATCH() AGAINST()
de data
en NIVEL SUPERIOR SELECT, así esto. (NO TRABAJÓ)
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
La declaración anterior es perfecta para mí, pero no funciona porque la data
columna se crea sobre la marcha y no admite tener un ÍNDICE FULLTEXT.
Mi pregunta es cómo proceder para que mi motor funcione.
- ¿Puedes de alguna manera hacer
data
un FULLTEXT? - ¿Hay alguna manera de hacerlo funcionar que no sea IN BOOLEAN MODE que no sea compatible con los puntajes?
- ¿Existe un enfoque para todo este tema que lo haga funcionar? Crear una tabla temporal no resuelve esto, la regla del 50% de MATCH () AGAINST () hace que una consulta devuelva 0 resultados, pero hay muchos
- Tal vez hay algo poco que extraño?
- La creación de un VIEW tampoco funciona, MySQL no es compatible con INDEX-es en los VIEW.
- ¿Quizás sea una buena idea usar IN BOOLEAN MODE y crear una puntuación manualmente?
He estado trabajando para este problema por más de dos días. Así que le pido amablemente ayuda. Gracias.
fuente