Rumah > rangka kerja php > Swoole > teks badan

Gabungan sempurna Swoole dan ElasticSearch: membina enjin carian teks penuh berprestasi tinggi

WBOY
Lepaskan: 2023-06-14 12:44:35
asal
1183 orang telah melayarinya

Dengan pembangunan berterusan pengkomputeran awan dan teknologi data besar, enjin carian teks penuh semakin digunakan secara meluas dan telah menjadi bahagian yang amat diperlukan dalam analisis data, carian pintar, pengurusan maklumat dan bidang lain. Dalam pelaksanaan enjin carian teks penuh, Swoole dan ElasticSearch sudah pasti dua alat berkuasa yang boleh digabungkan untuk membina enjin carian teks penuh berprestasi tinggi.

Swoole ialah rangka kerja komunikasi rangkaian berprestasi tinggi berdasarkan bahasa PHP Ia menyokong pelbagai proses, coroutine, tak segerak, konkurensi dan ciri lain. ElasticSearch ialah enjin carian teks penuh sumber terbuka dengan kelebihan pengedaran, ketersediaan tinggi dan kebolehskalaan mendatar. Dengan menggabungkan Swoole dan ElasticSearch, kami boleh membina enjin carian teks penuh berprestasi tinggi dan boleh skala untuk merealisasikan fungsi carian teks penuh.

Sebelum melaksanakan enjin carian teks penuh, kita perlu memahami prinsip carian teks penuh. Pendapatan teks penuh ialah teknologi perolehan semula berdasarkan indeks terbalik, yang menggunakan semua perkataan dalam data teks sebagai item indeks untuk mencipta jadual indeks. Apabila pengguna memasukkan istilah carian, istilah carian dibandingkan dengan perkataan dalam jadual indeks, semua dokumen yang memenuhi syarat ditemui, diisih mengikut kaitan, dan akhirnya hasil carian dibentangkan kepada pengguna.

Seterusnya, kami memperkenalkan secara terperinci cara menggunakan Swoole dan ElasticSearch untuk membina enjin carian teks penuh.

Langkah 1: Pasang Swoole dan ElasticSearch

Swoole boleh dipasang melalui pakej sumber atau alat komposer yang disediakan oleh laman web rasmi. ElasticSearch boleh dipasang melalui pakej pemasangan yang disediakan di laman web rasmi, atau boleh dipasang dengan cepat melalui teknologi kontena seperti Docker.

Langkah 2: Bina jadual indeks

Dalam ElasticSearch, kami menggunakan pemetaan untuk mentakrifkan jadual indeks dan data dokumen disimpan dalam jadual indeks dalam format JSON. Apabila membina jadual indeks, anda perlu menentukan parameter seperti nama indeks, jenis dokumen dan pemetaan. Kod khusus adalah seperti berikut:

use ElasticsearchClientBuilder;

$client = ClientBuilder::create()->build();
$params = [
    'index' => 'my_index',
    'body' => [
        'mappings' => [
            'my_mapping' => [
                'properties' => [
                    'title' => [
                        'type' => 'text'
                    ],
                    'content' => [
                        'type' => 'text'
                    ]
                ]
            ]
        ]
    ]
];

$response = $client->indices()->create($params);
Salin selepas log masuk

Melalui kod di atas, kami mencipta jadual indeks bernama my_index dan mentakrifkan jenis dokumen sebagai my_mapping, yang mengandungi dua medan: tajuk dan kandungan.

Langkah 3: Masukkan data dokumen

Dalam ElasticSearch, kami menyimpan dan mendapatkan semula data melalui dokumen, yang disimpan dalam format JSON. Contoh kod untuk memasukkan dokumen adalah seperti berikut:

$params = [
    'index' => 'my_index',
    'type' => 'my_mapping',
    'id' => '1',
    'body' => [
        'title' => '标题',
        'content' => '文本内容'
    ]
];

$response = $client->index($params);
Salin selepas log masuk

Melalui kod di atas, kami memasukkan sekeping data dokumen dengan id 1, tajuk "tajuk", dan kandungan "kandungan teks ".

Langkah 4: Lakukan pengambilan teks penuh

Dalam ElasticSearch, kami melakukan perolehan teks penuh melalui pertanyaan, yang juga ditakrifkan dalam format JSON. Contoh kod carian teks penuh adalah seperti berikut:

$params = [
    'index' => 'my_index',
    'type' => 'my_mapping',
    'body' => [
        'query' => [
            'match' => [
                'title' => '关键词'
            ]
        ]
    ]
];

$response = $client->search($params);
Salin selepas log masuk

Dalam kod di atas, kami menggunakan padanan untuk melakukan carian teks penuh dan memadankan kata kunci carian "kata kunci" dengan medan tajuk.

Langkah 5: Gunakan Swoole untuk melaksanakan komunikasi rangkaian tak segerak

Dalam enjin carian teks penuh, komunikasi rangkaian merupakan bahagian yang sangat penting. Swoole menyediakan API komunikasi rangkaian tak segerak yang kaya, yang boleh melaksanakan operasi tak segerak seperti permintaan HTTP dan I/O rangkaian. Dengan menggunakan fungsi komunikasi rangkaian tak segerak Swoole, kami boleh melaksanakan enjin carian teks penuh berprestasi tinggi dan meningkatkan kelajuan tindak balas dan kestabilan carian teks penuh.

Berikut ialah contoh kod menggunakan Swoole untuk melaksanakan komunikasi rangkaian tak segerak:

$client = new SwooleClient(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
$client->on("connect", function(SwooleClient $cli) {
    $cli->send("GET / HTTP/1.1
Host: www.example.com

");
});
$client->on("receive", function(SwooleClient $cli, $data){
    echo "Received: ".$data."
";
    $cli->close();
});
$client->on("error", function(SwooleClient $cli){
    echo "Connect failed
";
});
$client->on("close", function(SwooleClient $cli){
    echo "Connection close
";
});
$client->connect('127.0.0.1', 80, 0.5);
Salin selepas log masuk

Melalui kod di atas, kami boleh menggunakan Swoole untuk melaksanakan komunikasi rangkaian tak segerak dan meningkatkan prestasi dan kestabilan enjin carian teks penuh.

Ringkasnya, dengan menggabungkan Swoole dan ElasticSearch, kami boleh membina enjin carian teks penuh berprestasi tinggi untuk mencapai fungsi carian teks penuh yang pantas dan tepat. Pada masa yang sama, kami juga boleh menggunakan fungsi komunikasi rangkaian tak segerak Swoole untuk meningkatkan prestasi dan kestabilan enjin carian teks penuh. Dalam aplikasi praktikal, teknologi lain juga boleh digabungkan untuk mengoptimumkan lagi prestasi dan kebolehskalaan enjin carian teks penuh.

Atas ialah kandungan terperinci Gabungan sempurna Swoole dan ElasticSearch: membina enjin carian teks penuh berprestasi tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan