Avec le développement d'Internet, les entreprises sont confrontées à des quantités de données textuelles de plus en plus importantes. Comment récupérer rapidement et précisément un contenu pertinent est devenu l'une des questions importantes pour les entreprises dans le domaine de l'information. En tant que moteur de recherche open source basé sur Lucene, Elasticsearch présente les caractéristiques d'une haute disponibilité, d'une grande évolutivité et d'une récupération rapide, ce qui en fait l'une des solutions privilégiées pour la récupération de texte intégral en entreprise. En tant que langage de programmation côté serveur populaire, PHP peut également effectuer rapidement du développement Web et du développement d'API, et est devenu l'un des langages couramment utilisés intégrés à Elasticsearch.
Cet article explique principalement les étapes détaillées de l'intégration de PHP et Elasticsearch pour réaliser la fonction de recherche en texte intégral.
1. Introduction à Elasticsearch
Elasticsearch est un moteur de recherche open source basé sur Lucene qui peut être utilisé pour récupérer rapidement et avec précision de grandes quantités de données textuelles. Elasticsearch adopte une architecture de stockage distribuée, prend en charge l'expansion horizontale et peut s'adapter aux besoins de stockage massif de données et de récupération rapide.
Elasticsearch fournit une interface API RESTful, prend en charge l'interaction des données au format JSON et peut être intégré aux langages de programmation couramment utilisés. Dans Elasticsearch, les données sont stockées en fonction des documents. Chaque document contient plusieurs champs, et chaque champ peut être imbriqué pour contenir d'autres champs, ce qui rend la structure des données plus flexible. Parallèlement, Elasticsearch prend en charge la récupération de texte intégral, la correspondance exacte, l'agrégation, l'analyse et d'autres opérations sur les documents.
2. Intégration de PHP et Elasticsearch
Elasticsearch-PHP est officiellement fourni La bibliothèque client PHP encapsule l'interface API RESTful d'Elasticsearch, ce qui facilite l'utilisation d'Elasticsearch dans les applications PHP. Nous pouvons installer la bibliothèque via Composer et exécuter la commande suivante :
composer require elasticsearch/elasticsearch
Avant de vous connecter à Elasticsearch, vous devez démarrer le service Elasticsearch. Pour utiliser la bibliothèque Elasticsearch-PHP pour vous connecter à Elasticsearch en PHP, vous devez d'abord instancier l'objet ElasticsearchClient et définir l'adresse IP et le port du serveur Elasticsearch connecté :
require 'vendor/autoload.php'; $client = ElasticsearchClientBuilder::create()->setHosts(['http://127.0.0.1:9200'])->build();
Parmi eux, la méthode setHosts() transmet un paramètre de tableau, chaque élément représente un serveur Elasticsearch et plusieurs serveurs peuvent être configurés pour obtenir une haute disponibilité et un équilibrage de charge.
Dans Elasticsearch, un index est une structure de données utilisée pour stocker et récupérer des données similaires, semblable à une table dans un base de données. Vous pouvez créer un index nommé "my_index" via le code suivant :
$params = [ 'index' => 'my_index', 'body' => [ 'settings' => [ 'number_of_shards' => 5, // 分片数 'number_of_replicas' => 1, // 副本数 ], ], ]; $response = $client->indices()->create($params);
Parmi eux, dans le paramètre du tableau $params, 'settings' représente les paramètres de l'index, y compris des informations telles que le nombre de fragments et le nombre de répliques. 'body' représente le mappage de l'index. Vous pouvez définir les champs et les types de l'index dans ce paramètre.
L'ajout de documents dans Elasticsearch peut être réalisé via le code suivant :
$params = [ 'index' => 'my_index', 'id' => '1', 'body' => [ 'title' => 'Elasticsearch PHP集成', 'content' => 'Elasticsearch是一款基于Lucene的开源搜索引擎...' ] ]; $response = $client->index($params);
Où, $ Dans le paramètre de tableau params, « index » représente le nom d'index du document à ajouter ; « id » représente l'identifiant unique du document, un paramètre facultatif « body » représente le contenu du document et plusieurs champs et valeurs ; peut être réglé.
La recherche de documents dans Elasticsearch peut être réalisée via le code suivant :
$params = [ 'index' => 'my_index', 'body' => [ 'query' => [ 'match' => [ 'title' => 'Elasticsearch PHP' ] ] ] ]; $response = $client->search($params);
Où , $ Dans le paramètre params array, 'index' représente le nom de l'index du document à rechercher ; 'body' représente la condition de requête. Plusieurs conditions de requête et règles de tri peuvent être définies.
3. PHP+Elasticsearch pour implémenter la récupération de texte intégral
Avant d'utiliser Elasticsearch pour mettre en œuvre la récupération de texte intégral, les données à récupérer doivent d'abord être indexées. Lors de la création d'un index, vous pouvez définir le champ à récupérer sur le type texte, afin que l'indexation en texte intégral puisse être effectuée.
Dans cet exemple, supposons que les données à récupérer sont une table étudiant, contenant les champs id, nom, âge et score. Nous pouvons créer un index nommé « étudiant » via le code suivant :
$params = [ 'index' => 'student', 'body' => [ 'settings' => [ 'number_of_shards' => 5, 'number_of_replicas' => 1, ], 'mappings' => [ 'properties' => [ 'id' => ['type' => 'integer'], 'name' => ['type' => 'text', 'analyzer' => 'ik_max_word'], 'age' => ['type' => 'integer'], 'score' => ['type' => 'double'] ] ] ] ]; $response = $client->indices()->create($params);
Parmi eux, le type du champ 'nom' est défini sur texte, et un segmenteur de mots est spécifié. Le plug-in ik_max_word est utilisé ici. Le texte chinois peut être traité de manière à maximiser la segmentation des mots.
Une fois l'index créé, vous pouvez ajouter des documents à l'index. Supposons que vous souhaitiez ajouter des informations sur un élève, vous pouvez utiliser le code suivant pour y parvenir :
$params = [ 'index' => 'student', 'body' => [ 'id' => 1, 'name' => '张三', 'age' => 18, 'score' => 90.5 ] ]; $response = $client->index($params);
Vous pouvez ajouter plusieurs documents à l'index en les ajoutant en boucle.
Après l'indexation et l'ajout de documents, la recherche en texte intégral est possible. Dans cet exemple, la requête de correspondance est utilisée pour effectuer une recherche en texte intégral, qui peut être recherchée en saisissant des mots-clés. Ceci peut être réalisé grâce au code suivant :
$params = [ 'index' => 'student', 'body' => [ 'query' => [ 'match' => [ 'name' => '张三' ] ] ] ]; $response = $client->search($params);
Parmi eux, le champ « nom » est utilisé pour la correspondance et peut être remplacé par d'autres champs nécessitant une récupération de texte intégral. Les informations renvoyées par les résultats de la recherche se trouvent dans $response et les résultats de la requête peuvent être obtenus et affichés.
4. Résumé
Cet article présente les étapes détaillées d'intégration de PHP et Elasticsearch pour réaliser la fonction de recherche en texte intégral. Grâce aux étapes de connexion à Elasticsearch, de création d'index, d'ajout de documents et de recherche de documents, vous pouvez récupérer rapidement et avec précision de grandes quantités de données texte. Lors d'une recherche en texte intégral, il est recommandé d'utiliser un segmenteur de mots pour segmenter le chinois afin d'améliorer la précision et l'efficacité de la recherche.
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!