Maison  >  Article  >  développement back-end  >  Comment utiliser la technologie Elasticsearch en PHP ?

Comment utiliser la technologie Elasticsearch en PHP ?

WBOY
WBOYoriginal
2023-05-13 08:04:501749parcourir

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,并包含一个 titlecontent字段。一旦文档被索引并储存到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_typetitle 包含 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'index
  • type  : Type de document
  • id : Identifiant unique du document
  • corps : Tableau contenant des données de document ou une chaîne au format JSON
L'exemple de code ci-dessus crée un index nommé my_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éthode search 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 à rechercher
  • type : le type de document à rechercher
  • body : un tableau contenant la requête de recherche réelle
🎜Ce qui précède exemple de code recherchesmon_type et dont le titre 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
  • ul> 🎜L'exemple ci-dessus obtient les 10 premiers documents correspondant à 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!

Déclaration:
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