Il s'agit de la quatrième et dernière partie d'une série sur l'utilisation de l'implémentation de recherche SOLR d'Apache avec Solarium, une bibliothèque PHP pour l'intégrer dans votre application comme si elle était native.
Dans les trois premières parties, nous avons installé et configuré Solr et Solarium et commencé à créer un exemple d'application pour la recherche de films. Nous avons également examiné la recherche à facettes.
Nous allons terminer la série en regardant des fonctionnalités plus avancées de SOLR, et comment les utiliser avec Solarium.
Le composant de mise en évidence vous permet de mettre en évidence les parties d'un document qui a correspondant à votre recherche. Son comportement autour de ce qui est montré dépend du terrain - s'il s'agit d'un titre, c'est qu'il le montrera dans son intégralité avec les mots appariés présents, et des champs plus longs - comme un synopsis ou le corps d'un article - il mettra en évidence le mots mais en utilisant des extraits; Tout comme les résultats de recherche de Google.
Pour configurer la mise en évidence, vous devez d'abord spécifier les champs à inclure. Ensuite, vous pouvez définir un préfixe et un post-fixe correspondant pour les mots ou phrases en surbrillance. Ainsi, par exemple, pour rendre les mots et les phrases mis en évidence audacieux:
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<strong>'); $hl->setSimplePostfix('</strong>');
Alternativement, pour ajouter une couleur d'arrière-plan:
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>');
ou vous pouvez même utiliser les paramètres par champ:
$hl = $query->getHighlighting(); $hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>'); $hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');
Une fois que vous avez configuré le composant de mise en évidence dans votre implémentation de recherche, il y a un peu plus de travail à faire dans l'affichage dans votre vue de résultats de recherche.
Tout d'abord, vous devez extraire le document en surbrillance de la composante de mise en évidence par ID:
$highlightedDoc = $highlighting->getResult($document->id);
Maintenant, vous pouvez accéder à tous les champs en surbrillance en itérant à travers eux, en tant que propriétés du document mis en évidence:
if($highlightedDoc){ foreach($highlightedDoc as $field => $highlight) { echo implode(' (...) ', $highlight) . '<br/>'; } }
ou, vous pouvez utiliser getfield ():
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<strong>'); $hl->setSimplePostfix('</strong>');
Les champs en surbrillance ne renvoient pas simplement le texte, mais à la place, ils retourneront un tableau d '«extraits» de texte. S'il n'y a pas de correspondance pour ce champ particulier - par exemple si votre recherche correspondait au titre mais pas au synopsis - alors ce tableau sera vide.
Le code ci-dessus renverra un maximum d'un extrait. Pour modifier ce comportement, vous pouvez utiliser la méthode setSnippets ():
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>');
Par exemple, supposons que vous recherchiez le mot «étoile». L'un des résultats a un synopsis qui se lit comme suit:
Cet événement de cinéma à ne pas manquer mettra en vedette l'un des moments les plus mémorables de l'histoire de la télévision et des clips exclusifs sur la fabrication du meilleur des mondes et de Star Trek: The Next Generation Season 3. Se déroulant au 24e siècle, La génération suivante a été créée par Gene Roddenberry plus de 20 ans après la série originale de Star Trek. La génération suivante est devenue la série la plus longue de la franchise Star Trek, composée de 178 épisodes au cours de 7 saisons. Star Trek: The Next Generation - Le meilleur des deux mondes est la première occasion de voir le meilleur des deux mondes, l'un des plus grands épisodes télévisés de tous les temps, en tant que long métrage glorieusement remasterisé dans certains cinémas de films nationaux.
Le tableau de synopsis du document en surbrillance contiendra trois éléments:
Une façon d'afficher plusieurs extraits est de les imploser, par exemple:
$hl = $query->getHighlighting(); $hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>'); $hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');
Cela se traduit par ce qui suit:
Histoire et clips exclusifs sur la fabrication du meilleur des mondes et Star Trek: The Next Generation… après la série originale de Star Trek. La génération suivante est devenue la série la plus longue de la franchise Star… Trek, composée de 178 épisodes en 7 saisons. Star Trek: The Next Generation - The Best of
Il existe un certain nombre d'autres paramètres que vous pouvez utiliser pour modifier le comportement du composant de mise en évidence, qui sont expliqués ici.
Maintenant que nous avons couvert comment utiliser la mise en évidence, l'intégrer dans notre application de recherche de films devrait être simple.
La première chose à faire est de modifier les applications / contrôleurs / HomeController.php en ajoutant ce qui suit, juste avant d'exécuter la recherche:
$highlightedDoc = $highlighting->getResult($document->id);
Ensuite, les résultats de la recherche - dont vous vous souviendrez sont dans l'application / vues / home / index.blade.php - devenir:
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<strong>'); $hl->setSimplePostfix('</strong>');
Remarquez comment chaque résultat de recherche mélange et correspond essentiellement aux champs entre le document de résultat de recherche et le document mis en évidence - ce dernier est effectivement un sous-ensemble du premier. Selon votre schéma, vous pouvez avoir tous vos champs disponibles dans la version en surbrillance.
Le composant Suggeter est utilisé pour suggérer des termes de requête basés sur une entrée de requête incomplète. Essentiellement, il examine l'index sur un champ donné et extrait les termes de recherche qui correspondent à un certain modèle. Vous pouvez ensuite commander ces suggestions par fréquence pour augmenter la pertinence de la recherche.
Pour configurer le Suggester, nous devons le configurer dans votre fichier solrconfig.xml. Ouvrez-le Placez l'extrait suivant de XML quelque part près des autres déclarations
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>');
Vous remarquerez un certain nombre de références à «spellcheck», mais c'est simplement parce que le composant Suggester réutilise une grande partie de cette fonctionnalité en interne.
Le bit important à remarquer est l'élément
Redémarrez SOLR, et vous pouvez maintenant essayer d'exécuter une question de suggestion via votre navigateur Web:
$hl = $query->getHighlighting(); $hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>'); $hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');
(vous devrez peut-être modifier le numéro de port, selon la façon dont vous configurez SOLR)
La sortie doit ressembler un peu à ceci:
$highlightedDoc = $highlighting->getResult($document->id);
Comme vous pouvez le voir, Solr a retourné quatre matchs possibles pour «ho» - * ho ** use, ** ho ** use, ** ho ** rror et ** ho ** moi. Malgré * à la maison et horreur être avant house dans l'alphabet, house apparaît d'abord en raison d'être l'un des termes de recherche les plus courants de notre index .
Utilisons ce composant pour créer une assortie semi-automatique pour notre zone de recherche, ce qui suggérera des termes de recherche courants car l'utilisateur tape sa requête.
Tout d'abord, définissez l'itinéraire:
if($highlightedDoc){ foreach($highlightedDoc as $field => $highlight) { echo implode(' (...) ', $highlight) . '<br/>'; } }
Inclure jQuery UI (et jQuery lui-même) dans votre disposition:
if($highlightedDoc){ $highlightedTitle = $highlightedDoc->getField('title'); }
Inclure un thème jQuery UI:
$hl = $query->getHighlighting(); $hl->setSnippets(5); // . . . as before . . .
Et enfin, ajoutez des JS pour initialiser la saisie semi-automatique:
implode(' ... ', $highlightedDoc->getField('synopsis'))
C'est tout ce qu'il y a - essayez-le en exécutant quelques recherches.
Si vous préférez, vous pouvez utiliser un tableau pour configurer votre requête - par exemple:
// Get highlighting component, and apply settings $hl = $query->getHighlighting(); $hl->setSnippets(5); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>'); // Execute the query and return the result $resultset = $this->client->select($query);
Au démarrage, Solr traverse le répertoire domestique spécifié à la recherche de cœurs, qu'il identifie lorsqu'il localise un fichier appelé Core.propeties. Jusqu'à présent, nous avons utilisé un noyau appelé Collection1, et vous verrez qu'il contient trois éléments clés:
Le fichier core.propertes. Au plus basique, il contient simplement le nom de l'instance.
Le répertoire FOR contient les fichiers de configuration de l'instance. Au minimum, ce répertoire doit contenir un fichier schema.xml et un fichier solrconfig.xml.
Le répertoire de données contient les index. L'emplacement de ce répertoire peut être remplacé, et s'il n'existe pas, il sera créé pour vous.
Donc, pour créer une nouvelle instance, suivez ces étapes:
name = instanceName
… où instancename est le nom de votre nouveau répertoire.
Notez que la configuration schema.xml qui est expédiée dans le répertoire des exemples contient des références à un certain nombre de fichiers texte - par exemple des mots d'arrêt.txt, des protwords.txt, etc. - que vous devrez peut-être également copier.
puis redémarrez Solr.
Vous pouvez également ajouter un nouveau noyau via l'interface Web administrative dans votre navigateur Web - cliquez sur Core Admin sur le côté gauche, puis ajoutez Core.
Il y a quelques fichiers de configuration supplémentaires qui valent une mention.
Le fichier de mots stopS.txt - ou plus spécifiquement, les fichiers spécifiques à la langue tels que Lang / Stopwords_en.txt - contiennent des mots qui doivent être ignorés par l'indexeur de recherche, tel que «A», «le» et «AT» . Dans la plupart des cas, vous n'aurez probablement pas besoin de modifier ce fichier.
Selon votre application, vous pouvez constater que vous devez ajouter des mots à protwords.txt. Ce fichier contient une liste de mots protégés qui ne sont pas «entités» - c'est-à-dire réduits à leur forme de base; Par exemple, «demandé» devient «demander», «travailler» devient «travail». Parfois, les tentatives de «corriger» les mots, en supprimant peut-être ce qu'elle pense, ce sont des lettres de nombres erronées à la fin. Vous pourriez faire face à des zones géographiques et constater que le «Maine» est en train de «Maine».
Vous pouvez spécifier des synonymes - des mots avec la même signification - dans synonyms.txt. Synonymes séparés avec des virgules en ligne. Par exemple:
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<strong>'); $hl->setSimplePostfix('</strong>');
Vous pouvez également utiliser Synoyms.txt pour aider à corriger les erreurs d'orthographe courantes à l'aide de mappages de synonymes, par exemple:
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>');
Si vous utilisez des champs de devises, vous souhaiterez peut-être mettre à jour et garder un œil sur Currency.xml, qui spécifie certains exemple de taux de change - qui sont bien sûr très volatils.
Dans cette série, nous avons examiné l'implémentation SOLR d'Apache pour la recherche et utilisé la bibliothèque PHP Solarium pour interagir avec elle. Nous avons installé et configuré SOLR avec un exemple de schéma, et construit une application conçue pour rechercher un ensemble de films, qui montre un certain nombre de fonctionnalités de SOLR. Nous avons examiné la recherche à facettes, mis en évidence les résultats et le composant Dismax. J'espère que cela vous donnera suffisamment de mise à la terre pour l'adapter pour utiliser SOLR pour la recherche dans vos applications.
Pour plus de lecture, vous souhaiterez peut-être télécharger le guide de référence SOLR en tant que PDF ou consulter la documentation de Solarium.
Implémentation de la saisie semi-automatique avec SOLR et Solarium implique la création d'un Suggeter dans votre fichier de configuration SOLR. Ce suggère sera utilisé pour fournir des suggestions pour les requêtes utilisateur. Une fois le Suggester mis en place, vous pouvez utiliser la requête Suggerster de Solarium pour obtenir des suggestions. La requête Suggeter renvoie une liste de suggestions en fonction de l'entrée de l'utilisateur, que vous pouvez ensuite afficher à l'utilisateur.
Le solarium et le stellaire sont deux différents logiciels. Solarium est une bibliothèque PHP qui fournit une API pour interagir avec SOLR, une puissante plate-forme de recherche. D'un autre côté, Stellarium est un planétarium open source gratuit pour votre ordinateur. Il montre un ciel réaliste en 3D, tout comme ce que vous voyez avec l'œil nu, les jumelles ou un télescope.
pour utiliser le solarium pour interroger Solr , vous devez d'abord créer une instance client avec la configuration de votre serveur Solr. Ensuite, vous pouvez créer une requête sélectionnée à l'aide de la fonction CreateSelect du client. Vous pouvez définir divers paramètres sur la requête, tels que les champs à retourner, la chaîne de requête et tous les filtres. Une fois la requête configurée, vous pouvez l'exécuter à l'aide de la fonction EXECUTE du client, qui renverra un ensemble de résultats que vous pouvez itérater pour accéder aux documents individuels.
Pour ajouter des documents à SOLR à l'aide de Solarium, vous devez d'abord créer une instance client avec la configuration de votre serveur Solr. Ensuite, vous pouvez créer une requête de mise à jour à l'aide de la fonction CreateUpdate du client. Vous pouvez ajouter des documents à cette requête à l'aide de la fonction addDocument, qui prend une instance de document comme argument. L'instance de document doit avoir tous les champs et valeurs que vous souhaitez ajouter au document. Une fois que tous les documents sont ajoutés à la requête, vous pouvez l'exécuter à l'aide de la fonction d'exécution du client.
Pour supprimer des documents de Solr à l'aide de Solarium, vous Besoin d'abord de créer une instance client avec la configuration de votre serveur Solr. Ensuite, vous pouvez créer une requête de mise à jour à l'aide de la fonction CreateUpdate du client. Vous pouvez ajouter des commandes delete à cette requête à l'aide des fonctions AddDeleteById ou AddDeleteByQuery. Une fois que toutes les commandes de suppression sont ajoutées à la requête, vous pouvez l'exécuter à l'aide de la fonction d'exécution du client.
Pour optimiser votre index SOLR à l'aide de Solarium, vous devez d'abord créer une instance client avec la configuration de votre serveur Solr. Ensuite, vous pouvez créer une requête de mise à jour à l'aide de la fonction CreateUpdate du client. Vous pouvez ajouter une commande Optimize à cette requête en utilisant la fonction Addoptimize. Une fois que la commande Optimiser est ajoutée à la requête, vous pouvez l'exécuter à l'aide de la fonction d'exécution du client.
Lorsque vous utilisez le solarium avec SOLR, des erreurs Peut être géré en attrapant le solarium_exception lancé par la fonction d'exécution du client. Cette exception contiendra des informations sur l'erreur, telles que le message d'erreur et la réponse SOLR.
Pour utiliser des facettes avec Solarium et Solr, vous Besoin d'abord de créer une requête sélectionnée à l'aide de la fonction CreateSelect du client. Ensuite, vous pouvez ajouter un ensemble de facettes à la requête à l'aide de la fonction addfacetSet. Vous pouvez ajouter différents types de facettes à l'ensemble de facettes, tels que les facettes de champ, les facettes de requête et les facettes de portée. Une fois les facettes configurées, vous pouvez exécuter la requête à l'aide de la fonction d'exécution du client, qui renverra un ensemble de résultats qui inclut les résultats des facettes.
Pour utiliser la mise en évidence avec Solarium et Solr, vous devez d'abord créer une requête sélectionnée à l'aide de la fonction CreateSelect du client. Ensuite, vous pouvez ajouter un surligneur à la requête en utilisant la fonction AddHighLighting. Vous pouvez définir divers paramètres sur le surligneur, tels que les champs à mettre en surbrillance et le nombre d'extraits à retourner. Une fois le surligneur configuré, vous pouvez exécuter la requête à l'aide de la fonction d'exécution du client, qui renverra un ensemble de résultats qui comprend les résultats de mise en évidence.
Pour utiliser la pagination avec Solarium et Solr, vous devez d'abord créer une requête sélectionnée à l'aide de la fonction CreateSelect du client. Ensuite, vous pouvez définir les paramètres de démarrage et de lignes sur la requête pour spécifier la plage de résultats à retourner. Le paramètre de démarrage spécifie l'index du premier résultat à retourner et le paramètre des lignes spécifie le nombre de résultats à retourner. Une fois la pagination configurée, vous pouvez exécuter la requête à l'aide de la fonction d'exécution du client, qui renverra un ensemble de résultats qui inclut la plage de résultats spécifiée.
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!