Avec l'essor des applications Web, les moteurs de recherche sont devenus une fonctionnalité essentielle des applications modernes. Dans le passé, nous utilisions des requêtes SQL pour rechercher des données, mais SQL n'était pas spécialement conçu pour la recherche. Afin de pallier cette lacune, des moteurs de recherche en texte intégral ont été créés, comme Apache Solr, Elasticsearch, etc.
Elasticsearch est un moteur de recherche en texte intégral populaire basé sur Lucene qui fournit des fonctionnalités de recherche et d'analyse distribuées prêtes à l'emploi pour l'analyse de données et les moteurs de recherche en temps réel. Par rapport aux bases de données relationnelles traditionnelles, Elasticsearch peut exécuter des requêtes plus rapidement, mieux gérer des structures de données hautement dynamiques et prend en charge des langages de requête plus riches.
Dans cet article, nous présenterons comment utiliser Elasticsearch dans les applications PHP.
Préparation de l'environnement
Tout d'abord, nous devons installer Elasticsearch sur l'environnement local ou sur le serveur distant. Elasticsearch prend en charge tous les systèmes d'exploitation courants, notamment Windows, macOS et Linux. Vous pouvez obtenir différentes versions du programme d'installation sur le site officiel ou utiliser le gestionnaire de packages pour l'installer.
Pour utiliser la bibliothèque client elasticsearch de PHP, nous devons également installer l'extension client elasticsearch de PHP. Il peut être téléchargé, compilé et installé via PECL ou manuellement. Voici un exemple d'utilisation de PECL :
pecl install elasticsearch
Ajoutez ensuite la ligne suivante dans php.ini :
extension=elasticsearch.so
Une fois l'installation terminée, nous pouvons utiliser PHP pour faire fonctionner Elasticsearch.
Utiliser Elasticsearch en PHP
L'utilisation d'Elasticsearch en PHP nécessite l'utilisation d'une classe ou d'une bibliothèque client Elasticsearch. Actuellement, de nombreuses bibliothèques clientes PHP Elasticsearch sont disponibles, notamment Elasticsearch-PHP, Elasticsearch-DSL et Elastica, entre autres.
Dans cet article, nous utiliserons la bibliothèque Elasticsearch-PHP pour démontrer l'utilisation d'Elasticsearch.
Tout d'abord, nous devons créer un objet client Elasticsearch :
$client = ElasticsearchClientBuilder::create()->build();
Maintenant, nous pouvons utiliser cet objet client pour établir une connexion avec Elasticsearch et effectuer diverses opérations.
Indexation et recherche de documents
Dans Elasticsearch, les documents font référence à des données au format JSON. Grâce à la bibliothèque client PHP Elasticsearch, nous pouvons facilement convertir les tableaux PHP au format JSON et les indexer dans Elasticsearch. Tout d’abord, nous devons sélectionner un index (semblable à une table dans une base de données relationnelle), puis ajouter des données à cet index.
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => '1', 'body' => ['title' => 'My first document', 'content' => 'Hello World'] ]; $response = $client->index($params);
Dans le code ci-dessus, nous avons utilisé la méthode index
pour indexer le document. La méthode index
nécessite un tableau de paramètres, qui contient au moins les clés suivantes : index
方法来索引文档。index
方法需要一个参数数组,它至少包含以下键:
index
:索引的名称type
:文档的类型id
:文档的唯一标识符body
:包含文档数据的数组或JSON格式字符串上述代码示例创建了一个名为 my_index
的索引,类型为my_type
,文档唯一标识符为1,并包含一个 title
和 content
字段。一旦文档被索引并储存到Elasticsearch中,我们就可以搜索它们了。
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'match' => [ 'title' => 'My first document' ] ] ] ]; $response = $client->search($params);
在上面的代码中,我们使用 search
方法搜索文档。search
方法需要一个参数数组,它至少包含以下键:
index
:要搜索的索引的名称type
:要搜索的文档类型body
:包含实际搜索查询的数组上述代码示例搜索了 my_index
索引中,类型为 my_type
且 title
包含 My first document
的文档。搜索结果是一个JSON格式的响应,其中包含匹配查询的文档。
分页和排序
当搜索结果集很大时,我们可能希望对结果进行分页或排序。我们可以使用Elasticsearch提供的参数来实现这两个功能。
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'match' => [ 'title' => 'document' ] ] ], 'size' => 10, 'from' => 0, 'sort' => ['title' => ['order' => 'asc']] ]; $response = $client->search($params);
在上面的代码中,我们添加了以下额外的参数:
size
:每页文档的数量from
:起始文档的位置,用于分页sort
:按 title
字段进行升序排序以上示例获取了前10个匹配 document
的文档,并按 title
字段升序排序。
聚合搜索
Elasticsearch还支持聚合搜索,这是一种在搜索结果集上执行各种分析的技术。例如,我们可以从搜索结果中提取所有 author
字段的唯一值。
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'aggs' => [ 'unique_authors' => [ 'terms' => [ 'field' => 'author.keyword', 'size' => 10 ] ] ] ] ]; $response = $client->search($params);
在上面的代码中,我们使用 aggs
作为参数数组中的新键,并在其中定义了一个名称为 unique_authors
的聚合搜索。 terms
表示我们将按照 author
字段的值进行分组聚合。field
键用于指定要聚合的字段,size
index
: le nom de l'indextype
: Type de documentid
: Identifiant unique du documentcorps
: Tableau contenant des données de document ou une chaîne au format JSONmy_index
, le type est my_type
et l'identifiant unique du document vaut 1 et contient les champs title
et content
. Une fois les documents indexés et stockés dans Elasticsearch, nous pouvons les rechercher. rrreee
Dans le code ci-dessus, nous utilisons la méthodesearch
pour rechercher des documents. La méthode search
nécessite un tableau de paramètres contenant au moins les clés suivantes : 🎜index
: Le nom de l'index à rechercherbody
: un tableau contenant la requête de recherche réelletitre
contient Mon premier document
dans l'index code>mon_index. Le résultat de la recherche est une réponse au format JSON contenant les documents correspondant à la requête. 🎜🎜Pagination et tri🎜🎜Lorsque l'ensemble des résultats de recherche est volumineux, nous pouvons souhaiter paginer ou trier les résultats. Nous pouvons utiliser les paramètres fournis par Elasticsearch pour réaliser ces deux fonctions. 🎜rrreee🎜Dans le code ci-dessus, nous avons ajouté les paramètres supplémentaires suivants : 🎜size
: le nombre de documents par pageà partir de : La position du document de départ, utilisé pour la pagination
tri
: Trier par ordre croissant par le champ titre
document
et les trie par ordre croissant selon le champ titre
. 🎜🎜Recherche par agrégation🎜🎜Elasticsearch prend également en charge la recherche agrégée, une technique qui effectue diverses analyses sur les ensembles de résultats de recherche. Par exemple, nous pouvons extraire toutes les valeurs uniques du champ auteur
des résultats de recherche. 🎜rrreee🎜Dans le code ci-dessus, nous utilisons aggs
comme nouvelle clé dans le tableau des paramètres et y définissons une recherche agrégée nommée unique_authors
. terms
signifie que nous regrouperons et agrégerons en fonction de la valeur du champ author
. La clé field
est utilisée pour spécifier le champ à agréger, et la clé size
spécifie la taille limite du groupe d'agrégation. 🎜🎜Conclusion🎜Elasticsearch est un puissant moteur de recherche en texte intégral qui est devenu un élément indispensable de nombreuses applications Web modernes. Il peut nous aider à mieux traiter les données et à effectuer des recherches en temps réel. Cet article explique comment utiliser Elasticsearch en PHP et comment indexer, rechercher, paginer et trier des documents. En outre, il présente également comment utiliser Elasticsearch pour la recherche globale. Vous avez désormais appris à utiliser Elasticsearch pour mettre en œuvre des recherches efficaces et rapides dans vos applications PHP.
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!