Maison  >  Article  >  cadre php  >  Comment utiliser Elasticsearch avec ThinkPHP6

Comment utiliser Elasticsearch avec ThinkPHP6

王林
王林original
2023-06-20 12:09:392834parcourir

À l'ère actuelle d'Internet, avec la croissance explosive des données massives, les moteurs de recherche sont devenus de plus en plus importants. En tant que moteur de recherche en texte intégral hautement évolutif, Elasticsearch est progressivement devenu le premier choix des développeurs pour résoudre les problèmes de recherche.
Cet article expliquera comment utiliser Elasticsearch dans ThinkPHP6 pour implémenter des fonctions de récupération de données et de recherche, commençons.

Première étape : installez elasticsearch-php
Utilisez composer pour installer la bibliothèque officielle elasticsearch-php

composer require elasticsearch/elasticsearch

Après cela, nous devons écrire les informations de configuration de la connexion Elasticsearch dans le fichier configurelasticsearch.php, comme suit :

return [
    'host' => ['your.host.com'],
    'port' => 9200,
    'scheme' => 'http',
    'user' => '',
    'pass' => ''
];

Notez que il n'y a pas de mot de passe ici, vous devez ajouter un mot de passe et utiliser https pour vous connecter lors du déploiement en ligne afin de garantir que la connexion est sécurisée.

Étape 2 : Installer laravel-scout
laravel-scout est un package d'extension de recherche en texte intégral Eloquent ORM pour Laravel Nous devons l'installer dans ThinkPHP6 pour réaliser l'intégration d'Elasticsearch. Utilisez la commande suivante pour l'installer :

composer require laravel/scout

Étape 3. : Installez le package laravel-scout-elastic
Dans ThinkPHP6, nous devons utiliser le package d'extension laravel-scout-elastic pour établir la connexion avec Elasticsearch. De même, utilisez la commande suivante pour installer :

composer require babenkoivan/scout-elasticsearch-driver:^7.0

Configurez scout et elastic driver dans app.php

return [
    'providers' => [
        //...
        LaravelScoutScoutServiceProvider::class,
        ScoutElasticsearchElasticsearchServiceProvider::class,
        //...
    ],
    'aliases' => [
        //...
        'Elasticsearch' => ScoutElasticsearchFacadesElasticsearch::class,
        //...
    ],
];

Ensuite, configurez le moteur de recherche du modèle dans configscout.php, comme suit :

'searchable' => [
        AppModelsModel::class => [
            'index' => 'model_index',
            'type' => 'model_type'
        ],
    ],

La configuration ci-dessus montre que nous use Model: :class model object récupère les données et définit le nom d'index correspondant à l'objet Model::class comme model_index et le type comme model_type.

Étape 4 : Définir la logique de recherche
Nous utilisons le trait Searchable dans la classe Model et déclarons une fonction publique toSearchableArray(), comme suit :

<?php

namespace AppModels;

use LaravelScoutSearchable;

class Model extends Model
{
    // 使用scout可搜索的trait
    use Searchable;
    
    // 返回可被搜索的模型数据
    public function toSearchableArray()
    {
        return [
            'title' => $this->title,
            'content' => $this->content
        ];
    }

toSearchableArray() est utilisée pour renvoyer des champs de données consultables, ici nous en donnons un exemple. les champs sont donnés : titre et contenu.

Étape 5 : API liées à la recherche
Enfin, nous écrivons des API liées à la recherche, telles que des listes de résultats de recherche, des statistiques de recherche, etc. Cela nécessite que nous ayons une certaine compréhension de l'API officielle d'Elasticsearch. Pour plus de détails, veuillez vous référer à la documentation officielle d'Elasticsearch.

Par exemple, le code de l'API de liste de résultats de recherche peut ressembler à ceci :

use ElasticsearchClientBuilder;

class SearchController extends Controller
{
    //搜索结果列表
    public function list(Request $request)
    {
        $searchQuery = $request->input('q'); //搜索关键字

        //搜索操作
        $elasticsearch = ClientBuilder::create()->setHosts(config('elasticsearch.host'))->build();
        $response = $elasticsearch->search([
            'index' => 'model_index', // 索引名称
            'type' => 'model_type',   // 类型
            'size' => 1000,
            'body' => [
                'query' => [
                    'bool' => [
                        'should' => [
                            ['match' => ['title' => $request->input('q')]],
                            ['match' => ['content' => $request->input('q')]]
                        ]
                    ]
                ]
            ]
        ]);

        //格式化返回结果
        $result = [];
        foreach ($response['hits']['hits'] as $hit) {
            //搜索评分
            $hit['_score'];
            //搜索到的数据
            $result[] = $hit['_source'];
        }

        return json_encode($result);
    }
}

Le code ci-dessus utilise la classe ElasticsearchClientBuilder officiellement fournie par Elasticsearch pour créer une connexion, interroger des mots-clés et récupérer la liste de résultats. Vous pouvez remplacer $request->input('q') dans cette API par n'importe quel mot-clé de votre choix.

Cet article se termine ici. Je pense que vous pouvez essentiellement utiliser Elasticsearch pour implémenter des fonctions de recherche. Si vous rencontrez des problèmes dans la pratique, veuillez vous référer à la documentation officielle ou soulever un problème pour obtenir de l'aide.

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