index fulltext full example ejemplo php mysql search

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";