J'ai un moteur de recherche léger et décent qui fonctionne pour l'un de mes sites en utilisant MySQL fulltext index et php pour analyser les résultats. Bien fonctionner, mais je voudrais offrir plus de résultats semblables à google avec des extraits de texte à partir des résultats et les mots trouvés mis en évidence. Vous cherchez une solution basée sur PHP. Des recommandations?Meilleures pratiques pour afficher les résultats de recherche avec des extraits de texte associés à partir du résultat réel
Répondre
La recherche dans la base de données actuelle est possible jusqu'à ce que vous vouliez ajouter des fonctionnalités intéressantes comme celle ci-dessus. Dans mon expérience, il est préférable de créer une table de recherche dédiée, avec des mots-clés et des identifiants de pages/URL/etc. Puis remplissez ce tableau tous les n heures avec le contenu. Au cours de cette population, vous pouvez ajouter des extraits pour chaque document pour chaque mot clé.
Alternativement, un hack pourrait être:
<?php
$text = 'This is an example text page with content. It could be red, green or blue.';
$keyword = 'red';
$size = 5; // size of snippet either side of keyword
$snippet = '...'.substr($text, strpos($text, $keyword) - $size, strpos($text, $keyword) + sizeof($keyword) + $size).'...';
$snippet = str_replace($keyword, '<strong>'.$keyword.'</strong>', $snippet);
echo $snippet;
?>
utilisez preg_replace()
(ou une fonction similaire) et remplacez votre chaîne de recherche par du texte en surbrillance. par exemple.
$highlighted_text = preg_replace("/$search/", "<span class='highlighted'>$search</span>", $full_text);
Mise en évidence est pas mon problème. Je m'interroge sur la meilleure façon d'obtenir l'extrait _around_ le terme de recherche. – phirschybar
Pour MySQL, votre meilleur pari serait d'abord diviser vos mots de requête, nettoyer vos valeurs, puis concaténer tout nouveau dans une belle expression régulière.
Afin de mettre en évidence vos résultats, vous pouvez utiliser la balise <strong>
. Son utilisation serait sémantique comme vous mettez fort accent sur un élément.
// Done ONCE per page load:
$search = "Hello World";
//Remove the quotes and stop words
$search = str_ireplace(array('"', 'and', 'or'), array('', '', ''), $search);
// Get the words array
$words = explode(' ', $search);
// Clean the array, remove duplicates, etc.
function remove_empty_values($value) { return trim($value) != ''; }
function regex_escape(&$value) { $value = preg_quote($value, '/'); }
$words = array_filter($words, 'remove_empty_values');
$words = array_unique($words);
array_walk($words, 'regex_escape');
$regex = '/(' . implode('|', $words) . ')/gi';
// Done FOR EACH result
$result = "Something something hello there yes world fun nice";
$highlighted = preg_replace($regex, '<strong>$0</strong>', $result);
Si vous utilisez PostgreSQL, vous pouvez simplement utiliser le haut-ts_headline
as described in the documentation.
Sur un site plus grand, je pense que l'utilisation de javascript, jquery quelque chose comme serait la voie à suivre
- 1. Meilleures pratiques pour les chaînes de connexion
- 2. Meilleures pratiques WYSIWYG du navigateur
- 3. les meilleures pratiques pour refactorisation avec des variables locales
- 4. Quelles sont les meilleures pratiques pour interroger des données binaires à partir d'une base de données?
- 5. Meilleures pratiques: Suivi des impressions de bannières
- 6. meilleures pratiques avec des tables de code ou consultation
- 7. Comment puis-je récupérer des extraits de recherche dans google?
- 8. Meilleures pratiques du site Sandboxing?
- 9. Meilleures pratiques pour intercepter les exceptions de SQL en C#
- 10. Meilleures pratiques pour la transition de l'iPhone 2.2.1 à 3.0
- 11. Meilleures pratiques pour les références JavaScript IntelliSense
- 12. Meilleures pratiques pour les comptes non enregistrables
- 13. Les meilleures pratiques pour les requêtes et de service WCF
- 14. Rendre les graphiques à barres avec PHP: outils/meilleures pratiques
- 15. Extrait du petit texte pertinent (comme Google) des résultats de recherche en texte intégral
- 16. Meilleures pratiques pour les appels asynchrones dans MVP avec WinForms
- 17. Meilleures pratiques pour les traites d'enregistrement automatique?
- 18. Meilleures pratiques à l'aide de Git avec Visual Studio?
- 19. Quelles sont les meilleures pratiques pour manipuler du texte WsiWyg à partir d'un éditeur tel que l'éditeur de texte YUI Rich?
- 20. Meilleures pratiques pour recevoir des e-mails dans les rails
- 21. Meilleures pratiques de classe C++
- 22. Meilleures pratiques pour l'écriture de widgets javascript
- 23. Meilleures pratiques pour les tests d'intégration de fonctionnalités Eclipse
- 24. Meilleures pratiques pour appliquer des modifications à une application SharePoint
- 25. Quelles sont les meilleures pratiques pour imprimer à partir d'une application WinForms?
- 26. Drupal: où afficher les résultats de recherche personnalisés
- 27. CSS meilleures pratiques pour les portlets
- 28. Identification des correspondances exactes à partir de SQL Server Recherche de texte intégral
- 29. les meilleures pratiques/Logiciel d'analyse orientée objet
- 30. Les meilleures pratiques en ce qui concerne les mots-clés recherche avec sql
J'aime cette solution. J'ai un trafic assez léger donc le traitement supplémentaire sur chaque requête de recherche est bien. Merci!! – phirschybar
Vous pouvez changer les strpos en stripos, et changer le str_replace en preg_replace afin de conserver la casse. Par exemple, si vous recherchez "Burgers", vous ne souhaitez pas que le texte en gras soit remplacé par "hamburger". Preg_replace ('/('.$ keyword.')/I ',' $ 1 ', $ snippet) – Sherri