ホームページ > PHPフレームワーク > ThinkPHP > ThinkPHP6 で Elasticsearch を使用する方法

ThinkPHP6 で Elasticsearch を使用する方法

王林
リリース: 2023-06-20 12:09:39
オリジナル
2873 人が閲覧しました

現在のインターネット時代では、大量のデータが爆発的に増加しており、検索エンジンの重要性がますます高まっています。 Elasticsearch は、拡張性の高い全文検索エンジンとして、開発者にとって検索問題を解決するための最初の選択肢となりつつあります。
この記事では、ThinkPHP6 で Elasticsearch を使用してデータ取得および検索機能を実装する方法を紹介します。それでは始めてみましょう。

ステップ 1: elasticsearch-php のインストール
composer を使用して公式 elasticsearch-php ライブラリをインストールします

composer require elasticsearch/elasticsearch
ログイン後にコピー

その後、configuresearch.php ファイルに Elasticsearch 接続構成情報を書き込む必要があります

return [
    'host' => ['your.host.com'],
    'port' => 9200,
    'scheme' => 'http',
    'user' => '',
    'pass' => ''
];
ログイン後にコピー

ここにはパスワードがないことに注意してください。オンラインでデプロイする場合は、パスワードを追加し、接続が安全であることを確認するために https を使用して接続する必要があります。

ステップ 2: laravel-scout のインストール
laravel-scout は、Laravel 用の Eloquent ORM 全文検索拡張パッケージです。Elasticsearch の統合を実現するには、ThinkPHP6 にインストールする必要があります。インストールするには、次のコマンドを使用します。 :

composer require laravel/scout
ログイン後にコピー

ステップ 3: laravel-scout-elastic パッケージをインストールする
ThinkPHP6 では、Elasticsearch に接続するために拡張パッケージ laravel-scout-elastic を使用する必要があります。同様に、次のコマンドを使用してインストールします。

composer require babenkoivan/scout-elasticsearch-driver:^7.0
ログイン後にコピー

app.php でスカウトとエラスティック ドライバーを構成します

return [
    'providers' => [
        //...
        LaravelScoutScoutServiceProvider::class,
        ScoutElasticsearchElasticsearchServiceProvider::class,
        //...
    ],
    'aliases' => [
        //...
        'Elasticsearch' => ScoutElasticsearchFacadesElasticsearch::class,
        //...
    ],
];
ログイン後にコピー

次に、次のように configscout.php でモデルの検索エンジンを構成します。 # #

'searchable' => [
        AppModelsModel::class => [
            'index' => 'model_index',
            'type' => 'model_type'
        ],
    ],
ログイン後にコピー

上記の構成は、Model::class モデル オブジェクトを使用してデータを取得し、Model::class オブジェクトに対応するインデックス名を model_index として、タイプを model_type として定義することを示しています。

ステップ 4: 検索ロジックを定義する

Model クラスで Searchable トレイトを使用し、次のようにパブリック関数 toSearchableArray() 関数を宣言します。

<?php

namespace AppModels;

use LaravelScoutSearchable;

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

toSearchableArray() 関数が使用されます。検索可能なデータ フィールドを返すために、ここではタイトル フィールドとコンテンツ フィールドの例を示します。

ステップ 5: 検索関連 API

最後に、検索結果リスト、検索統計などの検索関連 API を作成します。そのためには、公式の Elasticsearch API をある程度理解している必要があります。詳細については、Elasticsearch の公式ドキュメントを参照してください。

たとえば、検索結果リスト API のコードは次のようになります。

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);
    }
}
ログイン後にコピー
上記のコードは、Elasticsearch によって公式に提供されている ElasticsearchClientBuilder クラスを使用して、接続を作成し、キーワードをクエリし、取得します。結果リスト。この API の

$request->input('q') は、任意のキーワードに置き換えることができます。

記事はここで終わります 基本的にはElasticsearchを使って検索機能を実装できると思います。実際に問題が発生した場合は、公式ドキュメントを参照するか、問題を提起して詳細なサポートを求めてください。

以上がThinkPHP6 で Elasticsearch を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート