Maison > Article > base de données > Comment implémenter une recherche pertinente dans Laravel avec plusieurs mots-clés ?
Recherche Laravel avec plusieurs mots-clés et tri par pertinence
Introduction
Cet article aborde un sujet commun défi dans le développement de Laravel : implémenter une fonction de recherche qui intègre plusieurs mots-clés dans plusieurs colonnes de base de données. Les résultats de la recherche doivent être classés en fonction de leur pertinence, en tenant compte de la présence et de l'ordre des mots-clés spécifiés.
Énoncé du problème
Un utilisateur tente d'implémenter un moteur de recherche dans Laravel où plusieurs mots-clés sont saisis dans une barre de recherche et les résultats sont affichés par ordre de pertinence. Deux colonnes spécifiques, meta_name et meta_description, doivent être interrogées. Les critères de recherche sont les suivants :
Solution
Pour réaliser cet ordre, trois requêtes de base de données distinctes sont construites :
$all = DB::table('posts') ->where('meta_name', 'like', ... /* %word1% %word2% %word3% */) ->orWhere('meta_description', 'like', ... /* %word1% %word2% %word3% */); $twoWords = DB::table('posts') ->where('meta_name', 'like', ... /* %word1% %word2% */) ->orWhere('meta_description', 'like', ... /* %word1% %word2% */) ->whereNotIn('id', $all->pluck('id')); $oneWord = DB::table('posts') ->where('meta_name', 'like', ... /* %word1% */) ->orWhere('meta_description', 'like', ... /* %word1% */) ->whereNotIn('id', $all->pluck('id')) ->whereNotIn('id', $twoWords->pluck('id'));
Union et Commande
Enfin, les trois ensembles de résultats sont combinés en utilisant union :
$posts = $all->union($twoWords)->union($oneWord)->skip($start)->take($this->rowperpage)->get();
Ce processus garantit que les lignes correspondant aux critères spécifiés sont récupérées dans l'ordre de pertinence souhaité.
Pagination et chargement asynchrone
Pour implémenter la pagination de chargement sur défilement, une méthode de saut et de prise peut être utilisée pour ajouter de nouveaux résultats au fur et à mesure que l'utilisateur fait défiler. Lorsqu'il n'y a plus de données à afficher, un message peut être renvoyé.
Conclusion
Grâce à la solution fournie, la fonction de recherche récupérera des résultats pertinents en fonction de plusieurs mots-clés et leur ordre d'apparition dans les colonnes spécifiées. Les résultats seront affichés sous forme de chargement par défilement, offrant une expérience utilisateur transparente.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!