Rumah  >  Artikel  >  rangka kerja php  >  Cara menggunakan Elasticsearch dengan ThinkPHP6

Cara menggunakan Elasticsearch dengan ThinkPHP6

王林
王林asal
2023-06-20 12:09:392850semak imbas

Dalam era Internet semasa, dengan pertumbuhan pesat data besar-besaran, enjin carian telah menjadi semakin penting. Sebagai enjin carian teks penuh berskala tinggi, Elasticsearch secara beransur-ansur menjadi pilihan pertama bagi pembangun untuk menyelesaikan masalah carian.
Artikel ini akan memperkenalkan cara menggunakan Elasticsearch dalam ThinkPHP6 untuk melaksanakan fungsi perolehan dan carian data, mari mulakan.

Langkah satu: Pasang elasticsearch-php
Gunakan komposer untuk memasang perpustakaan rasmi elasticsearch-php

composer require elasticsearch/elasticsearch

Selepas itu kita perlu menulis maklumat konfigurasi sambungan Elasticsearch dalam fail configuresearch.php , seperti berikut :

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

Perhatikan bahawa tiada kata laluan di sini Apabila menggunakan dalam talian, anda perlu menambah kata laluan dan menyambung menggunakan https untuk memastikan sambungan selamat.

Langkah 2: Pasang laravel-scout
Laravel-scout ialah pakej sambungan carian teks penuh Eloquent ORM untuk Laravel Kami perlu memasangnya dalam ThinkPHP6 untuk mencapai penyepaduan Elasticsearch ia:

composer require laravel/scout

Langkah 3: Pasang pakej laravel-scout-elastic
Dalam ThinkPHP6, kita perlu menggunakan pakej sambungan laravel-scout-elastic untuk menyambung ke Elasticsearch. Begitu juga, gunakan arahan berikut untuk memasang:

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

Konfigurasikan pemacu pengakap dan elastik dalam app.php

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

Seterusnya, konfigurasikan enjin carian model dalam configscout.php seperti berikut:

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

Konfigurasi di atas menunjukkan bahawa kami menggunakan objek model Model::class untuk mendapatkan data dan mentakrifkan nama indeks yang sepadan dengan objek Model::class sebagai model_index dan jenis sebagai model_type.

Langkah 4: Tentukan logik carian
Kami menggunakan sifat Boleh Cari dalam kelas Model dan mengisytiharkan fungsi awam kepadaSearchableArray() fungsi, seperti berikut:

<?php

namespace AppModels;

use LaravelScoutSearchable;

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

fungsi toSearchableArray() digunakan untuk mengembalikan medan Data yang boleh dicari, di sini kami memberikan contoh medan tajuk dan kandungan.

Langkah 5: API berkaitan carian
Akhirnya kami menulis API berkaitan carian, seperti senarai hasil carian, statistik carian, dsb. Ini memerlukan kami mempunyai pemahaman tertentu tentang API Elasticsearch rasmi Untuk butiran, sila rujuk dokumentasi rasmi Elasticsearch.

Sebagai contoh, kod API senarai hasil carian mungkin seperti berikut:

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);
    }
}

Kod di atas menggunakan kelas ElasticsearchClientBuilder yang disediakan secara rasmi oleh Elasticsearch untuk membuat sambungan, pertanyaan kata kunci dan mendapatkan semula senarai keputusan. Anda boleh menggantikan $request->input('q') dalam API ini dengan mana-mana kata kunci yang anda mahukan.

Artikel ini berakhir di sini Saya percaya anda pada asasnya boleh menggunakan Elasticsearch untuk melaksanakan fungsi carian. Jika anda menghadapi masalah dalam amalan, sila rujuk kepada dokumentasi rasmi atau bangkitkan isu untuk mendapatkan bantuan lanjut.

Atas ialah kandungan terperinci Cara menggunakan Elasticsearch dengan ThinkPHP6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn