Maison > développement back-end > tutoriel php > Utilisation du solarium avec SOLR pour la recherche - avancé

Utilisation du solarium avec SOLR pour la recherche - avancé

William Shakespeare
Libérer: 2025-02-21 10:20:13
original
446 Les gens l'ont consulté

Utilisation du solarium avec SOLR pour la recherche - avancé

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.

Les plats clés

  • Utilisez la fonction de mise en évidence de SOLR avec Solarium pour améliorer la visibilité des résultats de la recherche en marquant des mots ou des phrases appariés dans des documents, offrant des options de surlimination à la fois basées sur les extraits.
  • Intégrer les fonctionnalités d'observance automatique dans vos applications de recherche à l'aide du composant Suggeter de Solr, qui analyse les champs d'index pour la correspondance de motifs pour suggérer des termes de requête dynamiquement.
  • Utilisez la configuration basée sur la table pour la configuration des requêtes dans le solarium, permettant une personnalisation détaillée des paramètres de recherche et une manipulation des résultats.
  • Développez les capacités de SOLR en ajoutant des cœurs supplémentaires, qui impliquent de créer des répertoires et des fichiers de configuration spécifiques pour gérer efficacement différents ensembles de données ou des critères de recherche.
  • Personnalisez le comportement SOLR avec des fichiers de configuration supplémentaires tels que synonyms.txt et mots stop.txt pour affiner la compréhension et le traitement par le moteur de recherche du langage de requête, améliorant la pertinence et la précision de la recherche.

mettant en évidence les résultats avec solr

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>');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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>');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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>');
Copier après la connexion
Copier après la connexion
Copier après la connexion

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);
Copier après la connexion
Copier après la connexion
Copier après la connexion

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/>';
    }
}
Copier après la connexion
Copier après la connexion

ou, vous pouvez utiliser getfield ():

$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<strong>');
$hl->setSimplePostfix('</strong>');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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>');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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:

  • 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 The Star
  • Franchise Trek, composée de 178 épisodes sur 7 saisons. Star Trek: The Next Generation - The Best of

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>');
Copier après la connexion
Copier après la connexion
Copier après la connexion

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.

Intégration de la mise en évidence dans notre recherche de film

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);
Copier après la connexion
Copier après la connexion
Copier après la connexion

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>');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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.

Suggester - Ajout de la saisie semi-automatique

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>');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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 , qui indique au composant que nous voulons utiliser le champ de titre sur lequel baser nos suggestions.

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>');
Copier après la connexion
Copier après la connexion
Copier après la connexion

(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);
Copier après la connexion
Copier après la connexion
Copier après la connexion

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/>';
    }
}
Copier après la connexion
Copier après la connexion

Inclure jQuery UI (et jQuery lui-même) dans votre disposition:

if($highlightedDoc){
    $highlightedTitle = $highlightedDoc->getField('title');
}
Copier après la connexion

Inclure un thème jQuery UI:

$hl = $query->getHighlighting();
$hl->setSnippets(5);
// . . . as before . . .
Copier après la connexion

Et enfin, ajoutez des JS pour initialiser la saisie semi-automatique:

implode(' ... ', $highlightedDoc->getField('synopsis'))
Copier après la connexion

C'est tout ce qu'il y a - essayez-le en exécutant quelques recherches.

Configuration basée sur le tableau

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);
Copier après la connexion

ajoutant des noyaux supplémentaires

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:

  1. Créez un nouveau répertoire dans votre répertoire domestique - Films dans l'exemple d'application
  2. Créez un répertoire confre dans ce
  3. Créer ou copier un fichier schema.xml et le fichier solrconfig.xml dans le répertoire confre et personnaliser en conséquence
  4. Créez un fichier texte appelé core.properties dans le répertoire domestique, avec le contenu suivant:

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.

Configuration supplémentaire

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>');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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>');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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.

Résumé

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.

Questions fréquemment posées (FAQ) sur l'utilisation de Solarium avec SOLR pour la recherche avancée

Comment puis-je implémenter la saisie semi-automatique avec Solr et 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.

Quelle est la différence entre le solarium et le stelllarium?

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.

Comment puis-je utiliser Solarium pour interroger Solr?

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.

Comment puis-je ajouter des documents à SOLR à l'aide de Solarium?

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.

Comment puis-je supprimer des documents de SOLR à l'aide de Solarium?

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.

Comment puis-je optimiser mon index SOLR à l'aide de Solarium?

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.

Comment puis-je gérer les erreurs lors de l'utilisation du solarium avec SOLR?

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.

Comment puis-je utiliser des facettes avec Solarium et 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.

Comment puis-je utiliser la mise en évidence avec Solarium et Solr?

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.

Comment puis-je utiliser la pagination avec le solarium et le solr?

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal