Comment créer un moteur de recherche en texte intégral à l'aide de PHP et Elasticsearch
Les moteurs de recherche en texte intégral jouent un rôle important dans l'Internet moderne, permettant aux utilisateurs de trouver rapidement les informations qui répondent à leurs besoins. Un bon moteur de recherche en texte intégral doit non seulement effectuer une recherche rapide, mais doit également fournir des résultats de recherche de haute qualité. Cet article vous apprendra comment créer un moteur de recherche en texte intégral à l'aide de PHP et Elasticsearch.
Qu'est-ce qu'Elasticsearch ?
Elasticsearch est un moteur de recherche open source basé sur la bibliothèque de moteurs de recherche Lucene. Il fournit un moteur de recherche en texte intégral distribué et multi-tenant et est capable de traiter automatiquement des données à grande échelle. Elasticsearch peut rechercher et analyser des données rapidement et prend en charge la recherche en temps réel, ce qui signifie qu'à mesure que les données sont mises à jour, Elasticsearch peut renvoyer les résultats de recherche à partir de nouvelles données en quelques millisecondes.
Elasticsearch prend en charge une variété de types de données, notamment du texte, des valeurs numériques, des dates, des emplacements géographiques, etc. En utilisant Elasticsearch, nous pouvons rapidement créer un moteur de recherche en texte intégral et le personnaliser en fonction de différents besoins.
Connectez-vous à Elasticsearch à l'aide de PHP
Pour vous connecter à Elasticsearch à l'aide de PHP, nous devons installer la bibliothèque cliente Elasticsearch PHP. Le moyen le plus simple d'installer cette bibliothèque est d'utiliser Composer, qui peut être installé avec la commande suivante :
composer require elasticsearch/elasticsearch
Une fois l'installation terminée, référencez cette bibliothèque dans le code :
require 'vendor/autoload.php'; use ElasticsearchClientBuilder;
Ici, nous utilisons la classe ClientBuilder du PHP Elasticsearch bibliothèque cliente pour se connecter à Elasticsearch .
$config = [
'hosts' => ['localhost:9200']
];
$client = ClientBuilder::create()->setHosts($config['hosts'])->build();
Ici, nous utilisons la classe ClientBuilder pour créer un client Elasticsearch et vous connecter en utilisant le nom d'hôte et le port du cluster.
Créer un index
Dans un moteur de recherche en texte intégral, les données doivent être stockées dans l'index, pas dans la base de données. Pour créer un index, nous devons d'abord définir la structure des données et les paramètres de l'index. Cette structure est appelée cartographie.
Pour cet exemple, supposons que nous souhaitions créer un moteur de recherche pour rechercher des articles. Les articles comportent des champs tels que le titre, l'auteur, la date de publication et le texte. Nous pouvons définir le mappage en utilisant le code suivant :
$params = [
'index' => 'articles', 'body' => [ 'mappings' => [ 'article' => [ 'properties' => [ 'title' => ['type' => 'text'], 'author' => ['type' => 'text'], 'publish_date' => ['type' => 'date'], 'body' => ['type' => 'text'] ] ] ] ]
];
$response = $client->indices()->create($params);
Ici, nous définissons un nom d'index Il s'agit des « articles » et définit la cartographie des articles, notamment le titre, l'auteur, la date de publication et le texte de l'article. Cela créera un index appelé « articles » contenant un type appelé « article » qui contient les champs que nous avons définis.
Après avoir créé l'index, nous pouvons commencer à ajouter des données à l'index.
Ajouter des données
Pour ajouter des données, nous écrivons les données dans Elasticsearch en appelant la méthode index
:
$params = [
'index' => 'articles', 'type' => 'article', 'id' => 1, 'body' => [ 'title' => '如何使用PHP和Elasticsearch构建全文搜索引擎', 'author' => 'John Doe', 'publish_date' => '2020-01-01', 'body' => '全文搜索引擎在现代互联网中扮演着重要的角色……' ]
];
$client->index($params);
Ici, nous spécifiez l'index "articles" et le type "article" à indexer, en utilisant un identifiant unique. Lors de l'indexation des données, nous écrivons les données dans Elasticsearch, les indexons et les rendons consultables.
Interrogation de données
Pour interroger des données, nous devons construire une requête de requête et l'envoyer au serveur Elasticsearch. Nous pouvons utiliser une requête de correspondance, qui fera correspondre les mots-clés dans les champs. Par exemple :
$query = [
'match' => [ 'title' => 'Elasticsearch' ]
];
$params = [
'index' => 'articles', 'type' => 'article', 'body' => [ 'query' => $query ]
];
$response = $client->search($params);
Ici, nous interrogeons tous les "articles" index Dans le fichier de type "article", le document contient le champ "titre", et le champ "titre" contient le mot clé "Elasticsearch".
Elasticsearch prend également en charge de nombreux autres types de requêtes, telles que les requêtes booléennes, les requêtes par plage, les requêtes par préfixe, etc. Comprendre tous les types de requêtes et comment les utiliser peut rendre les moteurs de recherche plus adaptables à différents types de données.
Conclusion
Dans cet article, nous avons appris à créer un moteur de recherche en texte intégral à l'aide de PHP et Elasticsearch. Nous avons d'abord installé la bibliothèque client PHP Elasticsearch et l'avons utilisée pour nous connecter au serveur Elasticsearch. Ensuite, nous créons un index appelé « articles » et définissons le mappage des articles. Après cela, nous avons ajouté quelques données et exécuté une requête. Enfin, nous avons appris qu'Elasticsearch prend en charge de nombreux types de requêtes et comment les utiliser afin de pouvoir créer un moteur de recherche en texte intégral plus puissant, adapté à différents types de données.
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!