Rumah >pembangunan bahagian belakang >tutorial php >Cara menggunakan PHP dan Elasticsearch untuk mengesyorkan hasil carian

Cara menggunakan PHP dan Elasticsearch untuk mengesyorkan hasil carian

PHPz
PHPzasal
2023-07-17 08:32:021620semak imbas

Cara menggunakan PHP dan Elasticsearch untuk mengesyorkan hasil carian

Dengan perkembangan berterusan teknologi Internet, enjin carian telah menjadi pilihan pertama kami untuk mendapatkan maklumat. Untuk memberikan pengalaman pengguna yang lebih baik, enjin carian telah memperkenalkan sistem pengesyoran untuk memberikan pengguna hasil carian yang lebih relevan dan diperibadikan. Artikel ini akan memperkenalkan cara menggunakan PHP dan Elasticsearch untuk melaksanakan pengesyoran hasil carian.

  1. Pasang Elasticsearch

Mula-mula, kita perlu memasang Elasticsearch. Anda boleh memuat turun versi stabil terkini dari laman web rasmi Elasticsearch dan memasangnya mengikut dokumentasi rasmi.

  1. Buat Indeks

Dalam Elasticsearch, data disimpan dalam bentuk indeks. Sebelum membuat indeks, kita perlu menentukan pemetaan indeks. Dalam artikel ini, kami akan menggunakan sejarah carian pengguna sebagai asas untuk pengesyoran, jadi kami perlu mencipta indeks yang mengandungi sejarah carian pengguna. Dengan mengandaikan bahawa nama indeks kami ialah "search_history" dan jenis dokumen ialah "search", kami boleh menggunakan kod berikut untuk mencipta indeks:

require 'vendor/autoload.php';

use ElasticsearchClientBuilder;

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

$params = [
    'index' => 'search_history',
    'body' => [
        'mappings' => [
            'search' => [
                'properties' => [
                    'user_id' => ['type' => 'integer'],
                    'keyword' => ['type' => 'text']
                ]
            ]
        ]
    ]
];

$response = $client->indices()->create($params);

Kod ini menggunakan perpustakaan Elasticsearch-PHP untuk berinteraksi dengan Elasticsearch. Mula-mula, kami mencipta objek klien Elasticsearch, kemudian menentukan pemetaan indeks, dan menggunakan kaedah indeks()->create() untuk mencipta indeks. indices()->create()方法来创建索引。

  1. 存储搜索历史

当用户进行搜索操作时,我们需要将用户的搜索记录存储到Elasticsearch中。以下是一个简单的示例代码:

$params = [
    'index' => 'search_history',
    'type' => 'search',
    'body' => [
        'user_id' => 1,
        'keyword' => 'Elasticsearch'
    ]
];

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

这段代码使用了index()方法将用户搜索历史存储到Elasticsearch中。其中,index参数指定了索引名称,type参数指定了文档类型,body参数则是具体的文档内容。

  1. 获取搜索推荐

在得到用户的搜索历史后,我们可以根据用户的搜索历史来生成搜索推荐。以下是一个简单的示例代码:

$params = [
    'index' => 'search_history',
    'type' => 'search',
    'body' => [
        'query' => [
            'match' => [
                'keyword' => 'Elasticsearch'
            ]
        ],
        'aggs' => [
            'recommended_keywords' => [
                'terms' => [
                    'field' => 'keyword'
                ]
            ]
        ]
    ]
];

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

$recommended_keywords = $response['aggregations']['recommended_keywords']['buckets'];

这段代码使用了search()方法来进行搜索操作,并使用了聚合(aggregation)来获取推荐的关键词。聚合是Elasticsearch中一种常见的分析操作,用于统计、分组和过滤数据。

以上代码中,query参数用于指定搜索条件,这里以"keyword"字段匹配"Elasticsearch"作为示例。而aggs参数则用于定义聚合操作,terms参数指定了按照"keyword"字段进行聚合,并将结果存储在"recommended_keywords"中。最后,我们将推荐的关键词保存在$recommended_keywords

    Sejarah carian storan
    1. Apabila pengguna melakukan operasi carian, kita perlu menyimpan rekod carian pengguna dalam Elasticsearch. Berikut ialah kod contoh mudah:
    foreach ($recommended_keywords as $keyword) {
        echo $keyword['key'] . ' (' . $keyword['doc_count'] . ')';
    }

    Kod ini menggunakan kaedah index() untuk menyimpan sejarah carian pengguna ke dalam Elasticsearch. Antaranya, parameter index menentukan nama indeks, parameter type menentukan jenis dokumen dan parameter body ialah kandungan dokumen tertentu.

      Dapatkan syor carian

      Selepas mendapat sejarah carian pengguna, kami boleh menjana syor carian berdasarkan sejarah carian pengguna. Berikut ialah contoh kod mudah:

      rrreee

      Kod ini menggunakan kaedah search() untuk melaksanakan operasi carian dan menggunakan pengagregatan untuk mendapatkan kata kunci yang disyorkan. Pengagregatan ialah operasi analisis biasa dalam Elasticsearch, digunakan untuk mengira, mengumpulkan dan menapis data. 🎜🎜Dalam kod di atas, parameter query digunakan untuk menentukan syarat carian Di sini, medan "kata kunci" yang sepadan dengan "Elasticsearch" digunakan sebagai contoh. Parameter aggs digunakan untuk mentakrifkan operasi pengagregatan dan parameter terms menentukan pengagregatan mengikut medan "kata kunci" dan menyimpan hasilnya dalam "kata kunci_yang disyorkan". Akhir sekali, kami menyimpan kata kunci yang disyorkan dalam pembolehubah $recommended_keywords untuk kegunaan seterusnya. 🎜🎜🎜Tunjukkan cadangan carian🎜🎜🎜Akhir sekali, kami boleh memaparkan kata kunci yang disyorkan kepada pengguna. Berikut ialah contoh kod mudah: 🎜rrreee🎜Kod ini berulang melalui kata kunci yang disyorkan dan memaparkan kata kunci dan bilangan kejadiannya kepada pengguna. Bergantung pada keperluan khusus, kami juga boleh menyediakan fungsi seperti penyiapan automatik hasil carian dan carian berkaitan berdasarkan kata kunci yang disyorkan. 🎜🎜Kesimpulan🎜🎜Artikel ini memperkenalkan cara menggunakan PHP dan Elasticsearch untuk melaksanakan pengesyoran hasil carian. Dengan menyimpan sejarah carian pengguna dan menggunakan fungsi pengagregatan Elasticsearch untuk menjana kata kunci yang disyorkan, kami boleh memberikan pengguna pengalaman carian yang lebih baik. Sudah tentu, perkara di atas hanyalah contoh mudah, dan sistem pengesyoran sebenar mungkin memerlukan algoritma dan strategi yang lebih kompleks untuk memberikan hasil pengesyoran yang lebih diperibadikan. Saya harap artikel ini dapat memberi anda sedikit bantuan semasa membina enjin carian dan sistem pengesyoran. 🎜

Atas ialah kandungan terperinci Cara menggunakan PHP dan Elasticsearch untuk mengesyorkan hasil carian. 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