fulltext - PHP MySQL Search y Order By Relevancy
mysql match (5)
Sé cómo hacer una búsqueda de php mysql y mostrar los resultados. Sin embargo, debido a la naturaleza de lo que estoy tratando de lograr, necesito poder ordenar por relevancia. Déjame explicar esto mejor:
Las aplicaciones normales de "Apple iphone" buscarán en la base de datos usando% apple iphone% de la aplicación, pero si no hay registros que muestren esa frase en ese orden exacto, la búsqueda no producirá nada.
Lo que básicamente necesito hacer es buscar ''manzana'', ''iphone'' y ''aplicaciones'' por separado y luego combinar los resultados en uno, y luego debo calificar la relevancia por cuántas instancias de la palabra se encuentran en los registros . Por ejemplo, si hice lo que quería hacer y les devolví lo siguiente:
Iphone Applications From Apple
Apple Make The Best Apple Iphone Applications
Iphone Applications
Ellos clasificarían de la siguiente manera:
Apple Make The Best Apple Iphone Applications
Iphone Applications From Apple
Iphone Applications
Debido a cuántas instancias de los términos de búsqueda se encuentran. Ver resaltado:
[Apple] Make The Best [Apple] [Iphone] [Applications]
[Iphone] [Applications] From [Apple]
[Iphone] [Applications]
Espero haber explicado esto lo suficientemente bien y estaría muy agradecido si alguien pudiera darme algunos consejos.
Eche un vistazo a las funciones de búsqueda de MySQL FULLTEXT . Estas deberían devolver automáticamente los resultados por relevancia, y le otorgan mucho más control sobre sus búsquedas.
El único problema potencial con el uso de índices de texto completo es que no son compatibles con tablas InnoDB.
SELECT field2, field3, ..., MATCH(field1, field2) AGAINST ("search string") AS relevance WHERE MATCH(field1, field2) AGAINST "search string" ORDER BY relevance DESC LIMIT 0,10
En el conjunto de resultados, habrá un campo "relevancia", que se usa aquí para ordenar los resultados.
Un Google rápido me dio este enlace .
Ejemplo:
select title, match (title,content) against (”internet”) as score
from cont
where match (title,content) against (”internet”) limit 10;
Tal vez esto podría ayudar a alguien (ordene por relevancia y mantenga el conteo de palabras):
Ninguno de texto completo:
SELECT *, ( (value_column LIKE ''%rusten%'') + (value_column LIKE ''%dagen%'') + (value_column LIKE ''%bezoek%'') + (value_column LIKE ''%moeten%'') ) as count_words
FROM data_table
WHERE (value_column LIKE ''%dagen%'' OR value_column LIKE ''%rusten%'' OR value_column LIKE ''%bezoek%'' OR value_column LIKE ''%moeten%'')
ORDER BY count_words DESC
Texto completo:
SELECT * FROM data_table
WHERE MATCH(value_column) AGAINST(''+dagen +rusten +bezoek +moeten'' IN BOOLEAN MODE)
ORDER BY MATCH(value_column) AGAINST(''+dagen +rusten +bezoek +moeten'' IN BOOLEAN MODE) DESC;
No lo que exactamente quieres, pero el siguiente código definitivamente funciona para ti.
SELECT ("some text here" or `column_name`) RLIKE "Apple|Iphone|Application" AS Result ORDER BY Result DESC;
Separe todas las palabras con Bar (|) pero los resultados serán 1 o 0 fundado o no resp. Si desea obtener filas fundadas, consulte a continuación.
SELECT * FROM "table_name" WHERE `column_name` RLIKE "Apple|Iphone|Application";