En PHP, uso similar_text para comparar decenas de miles de filas de MySQL.

$mostSimilarText = "";
$mostSimilarPercent = 0;

//SELECT * FROM table

while($row = $stmt->fetch()){ /* 10,000 results*/
    similar_text("hello world", $row["source"], $percentMatch);

    if($percentMatch > $mostSimilarPercent) {
        $mostSimilarPercent = $matchPercent;
        $mostSimilarText = $row["source"];
    }
}
//Now I have the most similar text and percentage.

Ese código funciona, pero se ejecuta muy lentamente, especialmente con MUCHOS resultados. Mi objetivo es optimizarlo. Estoy tratando de averiguar cómo puedo limitar los resultados de MySQL en lugar de SELECT * FROM table. Esto mejoraría la eficiencia.

He experimentado con el uso de LIKE 'hello world', pero eso excluirá resultados como "hola palabra" (observe la L que falta). Necesito limitar los resultados de MySQL sin eliminar por completo el texto que es más del 75% similar, más o menos.

¿Alguien tiene algún consejo sobre cómo puedo hacer eso para mejorar el rendimiento?

0
Frog Guacamole 24 ago. 2020 a las 02:09

1 respuesta

La mejor respuesta

Sugeriré una combinación de DB. Antes de darte algunos ejemplos: imagina que tienes tu modelo relacional indexado, no relacional.

Flat DB / Document DB hará eso. Piense en un solo archivo para decir algo como

{
    "name": "Down to the river"
    "artist": "BruCe Boss"
    "sql_id": 1391
}

Las búsquedas de 'semejanza' en esto se vuelven mucho más fáciles y rápidas. 'Down the hiver', un archivo.

Ahora, extiéndalo a toda su biblioteca de música. En 1 archivo, su consulta es solo una lectura en el 1 archivo con esa información. Es un documento que indexa su base de datos. La consulta es más rápida que leer todos los registros, etc., y el resultado tiene la identificación de SQL para leer.

Enriquece su base de datos actual con más información pequeña que la gente busca, lo que agiliza las consultas.

Editaré con un buen ejemplo, pero lo anterior debería obtener la mayor parte del mismo.

-1
Pogrindis 23 ago. 2020 a las 23:36