Maison  >  Article  >  développement back-end  >  Développement PHP : Comment utiliser Elasticsearch pour implémenter la recherche en texte intégral

Développement PHP : Comment utiliser Elasticsearch pour implémenter la recherche en texte intégral

WBOY
WBOYoriginal
2023-06-14 17:07:291238parcourir

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.

  1. Créer un 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".

  1. Ajouter les données du document à l'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.

  1. Mettre à jour le document

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.

    Supprimer le document
Si vous devez supprimer un document existant, utilisez le code suivant :

$params = [

'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.

    Requête simple
Tout d'abord, effectuons une requête simple :

$params = [#🎜 🎜#
'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
  1. Si vous devez interroger plusieurs conditions, vous pouvez utiliser une requête booléenne pour combiner plusieurs conditions :
# 🎜🎜#$params = [

'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

  1. Si la quantité de données est importante, nous pouvons paginer les résultats de la recherche :
$ params = [

'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

  1. Pour des résultats de recherche plus précis, Elasticsearch calcule un score de pertinence pour chaque document. Le tri par note peut se faire avec le code suivant :
$params = [

'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. Analyse

Elasticsearch 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

  1. Le code suivant peut obtenir les 10 premiers mots avec la fréquence d'occurrence la plus élevée dans le champ "titre": #🎜🎜 #
  2. $params = [
'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'
                ]
            ]
        ]
    ]
]

];

    $response = $client - >indices()->putSettings($params);
  1. 这里,我们为名为“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!

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