Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pembangunan PHP: Cara menggunakan Elasticsearch untuk melaksanakan carian teks penuh

Pembangunan PHP: Cara menggunakan Elasticsearch untuk melaksanakan carian teks penuh

WBOY
WBOYasal
2023-06-14 17:07:291178semak imbas

Dalam aplikasi web moden, jumlah data semakin besar dan lebih besar, tetapi begitu juga jangkaan pengguna dan akses kepada data. Oleh itu, teknologi carian menjadi semakin penting untuk memenuhi jangkaan pengguna dan memberikan pengalaman pengguna yang lebih baik. Carian teks penuh ialah teknologi berkuasa yang boleh mengindeks, mencari dan mengisih sejumlah besar data dengan cepat. Dalam hal ini, Elasticsearch ialah enjin carian sumber terbuka terkemuka yang menyediakan banyak ciri lanjutan serta ketersediaan tinggi, berskala mudah dan kelebihan lain.

Dalam artikel ini, kami akan memperkenalkan cara menggunakan Elasticsearch untuk melaksanakan carian teks penuh melalui PHP. Kami akan bermula dengan persediaan persekitaran, termasuk pemasangan Elasticsearch dan PHP, dan kemudian memberikan pengenalan yang mendalam daripada tiga aspek utama pengindeksan, carian dan analisis.

1. Tetapan persekitaran

Mula-mula, pasang Elasticsearch secara setempat atau pada pelayan. Elasticsearch boleh dimuat turun dan dipasang dari laman web rasmi atau melalui pengurus pakej.

Kedua, pasang klien PHP Elasticsearch melalui Composer, iaitu elasticsearch-php Ia menyediakan banyak kaedah dan kelas yang mudah untuk memanggil API Elasticsearch.

komposer memerlukan elasticsearch/elasticsearch

Selepas pemasangan selesai, konfigurasikan perkara berikut dalam fail PHP:

memerlukan 'vendor/autoload.php';

$client = ElasticsearchClientBuilder::create()->build();

Dengan cara ini, pelanggan dicipta yang berkomunikasi dengan pelayan Elasticsearch.

2. Indeks

Dalam Elasticsearch, indeks ialah pengumpulan data yang digunakan untuk menyimpan dan mencari data dengan cepat. Kita boleh memasukkan data ke dalam indeks menggunakan API elasticsearch-php.

  1. Buat indeks

Pertama, kita perlu mencipta indeks baharu. Kami menggunakan kod berikut untuk mencipta jenis bernama "my_type" dalam indeks bernama "my_index".

$params = [

'index' => 'my_index',
'body'  => [
    'mappings' => [
        'my_type' => [
            'properties' => [
                'title' => ['type' => 'text'],
                'body'  => ['type' => 'text'],
            ]
        ]
    ]
]

];

$respons = $client->indeks()->create($params);

Medan "tajuk" dan "badan" dalam tatasusunan "sifat" adalah daripada jenis "teks", yang bermaksud ia diindeks teks penuh. Dalam amalan, kami akan menetapkan indeks dan jenis medan mengikut keperluan khusus.

Dengan cara ini, kami telah berjaya mencipta indeks bernama "my_index".

  1. Tambah data dokumen pada indeks

Masukkan dokumen ke dalam indeks menggunakan kod berikut:

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'body'  => [
    'title' => 'PHP Elasticsearch 全文检索',
    'body'  => 'Elasticsearch 是一个领先的全文搜索引擎,其功能包括分布式、高可用、实时搜索和分析能力等。',
]

];

$response = $client->index($params);

Di sini, kami memasukkan dokumen dengan tajuk dan kandungan ke dalam indeks.

  1. Kemas Kini Dokumen

Jika anda perlu mengemas kini dokumen yang sudah ada dalam indeks, gunakan kod berikut:

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'id'    => '1',
'body'  => [
    'doc' => [
        'title' => '修改后的标题',
        'body'  => '修改后的正文内容',
    ]
]

];

$response = $client->update($params);

Perlu diambil perhatian bahawa ID dokumen mesti disediakan semasa mengemas kini.

  1. Padam Dokumen

Jika anda perlu memadamkan dokumen sedia ada, gunakan kod berikut:

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'id'    => '1'

] ;

$response = $client->delete($params);

Dengan cara ini, kami telah menyelesaikan penciptaan, sisipan, kemas kini dan pemadaman indeks dan dokumen.

3. Cari

Mari lihat cara menggunakan API elasticsearch-php untuk mencari.

  1. Pertanyaan Mudah

Mula-mula, mari kita laksanakan pertanyaan mudah:

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'body'  => [
    'query' => [
        'match' => [
            'title' => 'PHP'
        ]
    ]
]

];

$response = $client->search($params);

Dalam kod di atas, kami melaksanakan pertanyaan padanan untuk semua dokumen dalam indeks yang mengandungi kata kunci "PHP" . Hasil carian akan disimpan dalam pembolehubah $response.

  1. Pertanyaan berbilang syarat

Jika anda perlu menanyakan berbilang syarat, anda boleh menggunakan pertanyaan bool untuk menggabungkan berbilang syarat:

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'body'  => [
    'query' => [
        'bool' => [
            'must' => [
                [ 'match' => [ 'title' => 'PHP' ] ],
                [ 'match' => [ 'body'  => '搜索引擎' ] ]
            ]
        ]
    ]
]

];

$response = $client->search($params);

Di sini, kami menetapkan dua syarat pertanyaan yang mesti dipenuhi pada masa yang sama melalui parameter mesti .

  1. Pertanyaan halaman

Jika jumlah data adalah besar, kami boleh halaman hasil carian:

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'body'  => [
    'from' => 0, 'size' => 10,
    'query' => [
        'match' => [
            'title' => 'PHP'
        ]
    ]
]

];

$response = $client->search($params);

Nyatakan offset dan saiz hasil yang ditetapkan melalui parameter dari dan saiz.

  1. Isih mengikut skor

Untuk hasil carian yang lebih tepat, Elasticsearch mengira skor perkaitan untuk setiap dokumen. Isih mengikut rating boleh dilakukan dengan kod berikut:

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'body'  => [
    'query' => [
        'match' => [
            'title' => 'PHP'
        ]
    ],
    'sort'  => [
        '_score' => [ 'order' => 'desc' ]
    ]
]

];

$response = $client->search($params);

Hasil pertanyaan akan diisih dari tinggi ke rendah mengikut skor perkaitan.

4. Analisis

Elasticsearch menyokong pelbagai fungsi analisis dan pengagregatan yang berkuasa, yang boleh kami gunakan untuk mendapatkan maklumat yang lebih mendalam tentang set data.

  1. Pengagregatan

Kod berikut boleh mendapatkan 10 perkataan teratas dengan kekerapan kejadian tertinggi dalam medan "tajuk":

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'size'  => 0,
'body'  => [
    'aggs' => [
        'top_titles' => [
            'terms' => [
                'field' => 'title.keyword',
                'size'  => 10
            ]
        ]
    ]
]

];

$response = $client->search($params);

Tentukan parameter saiz untuk melangkau dokumen yang dikembalikan dan hanya mengembalikan hasil agregat.

  1. Penganalisis

Elasticsearch juga menyediakan banyak penganalisis yang berkuasa untuk menganalisis dan memproses teks. Kod berikut menunjukkan cara menggunakan parser Cina untuk memproses teks:

$params = [

'index' => 'my_index',
'body'  => [
    'settings' => [
        'analysis' => [
            'analyzer' => [
                'my_analyzer'   => [
                    'type'      => 'custom',
                    'tokenizer' => 'ik_max_word'
                ]
            ]
        ]
    ]
]

];

$response = $client->indeks() - >putSettings($params);

这里,我们为名为“my_analyzer”的分析器指定了“ik_max_word”分词器。

下面的代码可以使用这个分析器来分析文本:

$params = [

'index' => 'my_index',
'body'  => [
    'query' => [
        'query_string' => [
            'query'         => '搜索',
            'analyzer'      => 'my_analyzer',
            'default_field' => 'title'
        ]
    ]
]

];

$response = $client->search($params);

这样,我们就可以使用中文分析器来分析中文文本了。

总结

在本文中,我向您介绍了如何使用elasticsearch-php的API来创建、添加、更新和删除索引和文档,以及如何使用搜索API来执行简单和复杂的查询。此外,我还介绍了使用聚合和分析器来处理数据的相关技术。

随着数据集规模的增加,Elasticsearch的重要性逐渐增加。只要您熟悉它的API,您就可以通过PHP轻松地利用其强大的搜索和分析能力来优化您的Web应用程序。

Atas ialah kandungan terperinci Pembangunan PHP: Cara menggunakan Elasticsearch untuk melaksanakan carian teks penuh. 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