Maison > Article > développement back-end > Développement PHP : Comment utiliser Elasticsearch pour implémenter la recherche en texte intégral
Dans les applications Web modernes, la quantité de données est de plus en plus importante, tout comme les attentes des utilisateurs et l'accès aux données. Par conséquent, la technologie de recherche devient de plus en plus importante pour répondre aux attentes des utilisateurs et offrir une meilleure expérience utilisateur. La recherche en texte intégral est une technologie puissante qui permet d'indexer, de rechercher et de trier rapidement de grandes quantités de données. À cet égard, Elasticsearch est un moteur de recherche open source de premier plan qui offre de nombreuses fonctionnalités avancées ainsi qu'une haute disponibilité, une évolutivité facile et d'autres avantages.
Dans cet article, nous présenterons comment utiliser Elasticsearch pour réaliser une récupération de texte intégral via PHP. Nous commencerons par la configuration de l'environnement, y compris l'installation d'Elasticsearch et de PHP, puis fournirons une introduction approfondie des trois principaux aspects de l'indexation, de la recherche et de l'analyse.
1. Paramètres d'environnement
Tout d'abord, installez Elasticsearch localement ou sur le serveur. Elasticsearch peut être téléchargé et installé depuis le site officiel ou via le gestionnaire de packages.
Deuxièmement, installez le client PHP d'Elasticsearch via Composer, qui est elasticsearch-php. Il fournit de nombreuses méthodes et classes pratiques pour appeler l'API Elasticsearch.
composer require elasticsearch/elasticsearch
Une fois l'installation terminée, configurez les éléments suivants dans le fichier PHP :
require 'vendor/autoload.php ';
$client = ElasticsearchClientBuilder::create()->build();
De cette façon, un client est créé qui communique avec le serveur Elasticsearch.
2. Index
Dans Elasticsearch, l'index est une collection de données utilisée pour stocker et retrouver rapidement des données. Nous pouvons utiliser l'API d'elasticsearch-php pour insérer des données dans l'index.
Tout d'abord, nous devons créer un nouvel index. Nous utilisons le code suivant pour créer un type nommé "my_type" dans l'index nommé "my_index".
$params = [
'index' => 'my_index', 'body' => [ 'mappings' => [ 'my_type' => [ 'properties' => [ 'title' => ['type' => 'text'], 'body' => ['type' => 'text'], ] ] ] ]
];
$response = $client->indices()->create($params) ;
Les champs "titre" et "corps" du tableau "propriétés" sont de type "texte", ce qui signifie qu'ils sont indexés en texte intégral. En pratique, nous définirons les index et les types de champs en fonction de besoins spécifiques.
De cette façon, nous avons réussi à créer un index nommé "my_index".
Insérez le document dans l'index en utilisant le code suivant :
$ params = [
'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'title' => 'PHP Elasticsearch 全文检索', 'body' => 'Elasticsearch 是一个领先的全文搜索引擎,其功能包括分布式、高可用、实时搜索和分析能力等。', ]
];
$response = $client->index($params);
Ici, nous apporterons un article Les documents avec titres et texte sont insérés dans l'index.
Si vous devez mettre à jour un document déjà dans l'index, utilisez le code suivant :
# 🎜🎜#$params = ['index' => 'my_index', 'type' => 'my_type', 'id' => '1', 'body' => [ 'doc' => [ 'title' => '修改后的标题', 'body' => '修改后的正文内容', ] ]];$response = $client->update($params);Il devrait Il convient de noter que lors de la mise à jour, l'identifiant du document doit être fourni.
'index' => 'my_index', 'type' => 'my_type', 'id' => '1'];$response = $client->delete($params);De cette façon, nous avons terminé l'index et le document Création, insertion, mise à jour et suppression. 3. Recherche Voyons comment utiliser l'API elasticsearch-php pour effectuer une recherche.
'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'match' => [ 'title' => 'PHP' ] ] ]
];
$response = $client->search($params);
Dans le code ci-dessus, nous effectuons une requête de correspondance, interrogeons tout documents de l'index qui contiennent le mot-clé "PHP". Les résultats de la recherche seront stockés dans la variable $response.
Requête multi-conditions'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'bool' => [ 'must' => [ [ 'match' => [ 'title' => 'PHP' ] ], [ 'match' => [ 'body' => '搜索引擎' ] ] ] ] ] ]];$response = $client->search($params);Ici , Nous spécifions deux conditions de requête qui doivent être remplies en même temps via le paramètre must.
Requête de pagination
'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'from' => 0, 'size' => 10, 'query' => [ 'match' => [ 'title' => 'PHP' ] ] ]];$response = $client->search($params);Spécifiez le résultat défini via le from et paramètres de taille offset et taille.
Trier par score
'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'match' => [ 'title' => 'PHP' ] ], 'sort' => [ '_score' => [ 'order' => 'desc' ] ] ]];$response = $client-> search( $params);Les résultats de la requête seront triés du haut au bas par score de pertinence. 4. AnalyseElasticsearch prend en charge une variété de fonctions d'analyse et d'agrégation puissantes, que nous pouvons utiliser pour obtenir des informations plus approfondies sur l'ensemble de données.
agrégation
'index' => 'my_index', 'type' => 'my_type', 'size' => 0, 'body' => [ 'aggs' => [ 'top_titles' => [ 'terms' => [ 'field' => 'title.keyword', 'size' => 10 ] ] ] ]
];
$response = $client->search($params);
Spécifiez le saut via le paramètre de taille. Les documents sont renvoyés et seuls les résultats agrégés sont renvoyés. Elasticsearch fournit également de nombreux analyseurs puissants pour analyser et traiter le texte. Le code suivant montre comment utiliser l'analyseur chinois pour traiter du texte :
$params = [
'index' => 'my_index', 'body' => [ 'settings' => [ 'analysis' => [ 'analyzer' => [ 'my_analyzer' => [ 'type' => 'custom', 'tokenizer' => 'ik_max_word' ] ] ] ] ]
];
这里,我们为名为“my_analyzer”的分析器指定了“ik_max_word”分词器。
下面的代码可以使用这个分析器来分析文本:
$params = [
'index' => 'my_index', 'body' => [ 'query' => [ 'query_string' => [ 'query' => '搜索', 'analyzer' => 'my_analyzer', 'default_field' => 'title' ] ] ]
];
$response = $client->search($params);
这样,我们就可以使用中文分析器来分析中文文本了。
总结
在本文中,我向您介绍了如何使用elasticsearch-php的API来创建、添加、更新和删除索引和文档,以及如何使用搜索API来执行简单和复杂的查询。此外,我还介绍了使用聚合和分析器来处理数据的相关技术。
随着数据集规模的增加,Elasticsearch的重要性逐渐增加。只要您熟悉它的API,您就可以通过PHP轻松地利用其强大的搜索和分析能力来优化您的Web应用程序。
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!