Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk membina enjin carian teks penuh menggunakan PHP dan Elasticsearch
Cara membina enjin carian teks penuh menggunakan PHP dan Elasticsearch
Enjin carian teks penuh memainkan peranan penting dalam Internet moden, membolehkan pengguna mencari maklumat yang memenuhi keperluan mereka dengan cepat. Enjin carian teks penuh yang baik bukan sahaja perlu mencari dengan cepat, tetapi juga perlu menyediakan hasil carian berkualiti tinggi. Artikel ini akan mengajar anda cara membina enjin carian teks penuh menggunakan PHP dan Elasticsearch.
Apakah itu Elasticsearch?
Elasticsearch ialah enjin carian sumber terbuka berdasarkan perpustakaan enjin carian Lucene. Ia menyediakan enjin carian teks penuh berbilang penyewa yang diedarkan dan mampu memproses data berskala besar secara automatik. Elasticsearch boleh mencari dan menganalisis data dengan cepat dan menyokong carian masa nyata, yang bermaksud bahawa semasa data dikemas kini, Elasticsearch boleh mengembalikan hasil carian daripada data baharu dalam milisaat.
Elasticsearch menyokong pelbagai jenis data, termasuk teks, nilai berangka, tarikh, lokasi geografi, dsb. Dengan menggunakan Elasticsearch, kami boleh membina enjin carian teks penuh dengan cepat dan menyesuaikannya mengikut keperluan yang berbeza.
Menyambung ke Elasticsearch menggunakan PHP
Untuk menyambung ke Elasticsearch menggunakan PHP, kami perlu memasang perpustakaan klien Elasticsearch PHP. Cara paling mudah untuk memasang pustaka ini ialah menggunakan Komposer, yang boleh dipasang dengan arahan berikut:
composer require elasticsearch/elasticsearch
Selepas pemasangan selesai, rujuk perpustakaan ini dalam kod anda:
require 'vendor/autoload.php'; use ElasticsearchClientBuilder;
Di sini kami gunakan kelas ClientBuilder Perpustakaan klien Elasticsearch PHP untuk menyambung ke Elasticsearch.
$config = [
'hosts' => ['localhost:9200']
];
$client = ClientBuilder::create()->setHosts($config['hosts'])-> build();
Di sini kami menggunakan kelas ClientBuilder untuk mencipta klien Elasticsearch dan menyambung menggunakan nama hos dan port kluster.
Buat indeks
Dalam enjin carian teks penuh, data perlu disimpan dalam indeks, bukan dalam pangkalan data. Untuk membuat indeks, kita perlu menentukan struktur data dan tetapan untuk indeks terlebih dahulu. Struktur ini dipanggil pemetaan.
Untuk contoh ini, mari kita anggap kita ingin mencipta enjin carian untuk mencari artikel. Artikel mempunyai medan seperti tajuk, pengarang, tarikh penerbitan dan teks. Kita boleh mentakrifkan pemetaan menggunakan kod berikut:
$params = [
'index' => 'articles', 'body' => [ 'mappings' => [ 'article' => [ 'properties' => [ 'title' => ['type' => 'text'], 'author' => ['type' => 'text'], 'publish_date' => ['type' => 'date'], 'body' => ['type' => 'text'] ] ] ] ]
];
$respons = $client->indeks()->create( $ params);
Di sini kami mentakrifkan indeks bernama "artikel" dan mentakrifkan pemetaan artikel, termasuk tajuk, pengarang, tarikh penerbitan dan teks artikel. Ini akan mencipta indeks yang dipanggil "artikel" yang mengandungi jenis yang dipanggil "artikel" yang mengandungi medan yang kami takrifkan.
Selepas mencipta indeks, kita boleh mula menambah data pada indeks.
Tambah data
Untuk menambah data, kami menulis data ke Elasticsearch dengan memanggil kaedah index
:
$params = [
'index' => 'articles', 'type' => 'article', 'id' => 1, 'body' => [ 'title' => '如何使用PHP和Elasticsearch构建全文搜索引擎', 'author' => 'John Doe', 'publish_date' => '2020-01-01', 'body' => '全文搜索引擎在现代互联网中扮演着重要的角色……' ]
] ;
$client->index($params);
Di sini kami menentukan jenis indeks "artikel" dan "artikel" untuk diindeks, sambil menggunakan ID unik. Apabila mengindeks data, kami menulis data ke dalam Elasticsearch, mengindeksnya, dan menjadikannya boleh dicari.
Data pertanyaan
Untuk membuat pertanyaan data, kami perlu membina permintaan pertanyaan dan menghantarnya ke pelayan Elasticsearch. Kami boleh menggunakan pertanyaan padanan, yang akan memadankan kata kunci dalam medan. Contohnya:
$query = [
'match' => [ 'title' => 'Elasticsearch' ]
];
$params = [
'index' => 'articles', 'type' => 'article', 'body' => [ 'query' => $query ]
];
$respons = $ client->search($params);
Di sini kami menanyakan semua dokumen jenis "artikel" dalam indeks "articles" yang mengandungi medan "title" dan medan "title" mengandungi kata kunci "Elasticsearch".
Elasticsearch juga menyokong banyak jenis pertanyaan lain, seperti pertanyaan Boolean, pertanyaan julat, pertanyaan awalan, dsb. Memahami semua jenis pertanyaan dan cara menggunakannya menjadikan enjin carian lebih mudah disesuaikan dengan jenis data yang berbeza.
Kesimpulan
Dalam artikel ini, kami mempelajari cara membina enjin carian teks penuh menggunakan PHP dan Elasticsearch. Kami mula-mula memasang perpustakaan klien Elasticsearch PHP dan menggunakannya untuk menyambung ke pelayan Elasticsearch. Kemudian, kami mencipta indeks yang dipanggil "artikel" dan menentukan pemetaan artikel. Selepas itu, kami menambah beberapa data dan menjalankan pertanyaan. Akhir sekali, kami mengetahui bahawa Elasticsearch menyokong banyak jenis pertanyaan dan mempelajari cara menggunakannya supaya kami boleh membina enjin carian teks penuh yang lebih berkuasa yang sesuai untuk jenis data yang berbeza.
Atas ialah kandungan terperinci Bagaimana untuk membina enjin carian teks penuh menggunakan PHP dan Elasticsearch. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!