Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengesyoran produk dan carian diperibadikan berdasarkan Elasticsearch dalam PHP

Pengesyoran produk dan carian diperibadikan berdasarkan Elasticsearch dalam PHP

PHPz
PHPzasal
2023-10-03 08:09:11754semak imbas

PHP 中基于 Elasticsearch 的商品推荐与个性化搜索

Tajuk: Pengesyoran produk dan carian diperibadikan berdasarkan Elasticsearch dalam PHP

Teks artikel:
Pengenalan:
Dengan pembangunan berterusan e-dagang, pengesyoran produk dan carian diperibadikan menjadi semakin penting. Pengguna berharap dapat mencari produk yang memenuhi keperluan mereka dengan cepat di kalangan sejumlah besar produk, dan peniaga juga perlu memaparkan produk yang paling sesuai kepada pengguna melalui sistem pengesyoran. Dalam pembangunan PHP, menggunakan Elasticsearch untuk melaksanakan pengesyoran produk dan carian diperibadikan adalah salah satu penyelesaian yang lebih biasa. Artikel ini akan memperkenalkan cara melaksanakan pengesyoran produk dan carian diperibadikan berdasarkan Elasticsearch, dan memberikan contoh kod khusus.

1. Konsep asas Elasticsearch
Elasticsearch ialah sumber terbuka, enjin carian berprestasi tinggi yang boleh mengindeks dan mencari sejumlah besar data dengan cepat. Sebelum menggunakan Elasticsearch, kita perlu memahami konsep asas berikut:

1.1 Indeks: Sama seperti pangkalan data dalam pangkalan data hubungan, indeks ialah konsep logik yang digunakan untuk mengumpulkan dan menyusun data Setiap indeks boleh mengandungi Pelbagai jenis (Jenis).

1.2 Jenis: Sama seperti jadual dalam pangkalan data hubungan, setiap jenis mempunyai medan dan atribut tersendiri.

1.3 Dokumen: Sama seperti baris atau rekod dalam pangkalan data hubungan, dokumen ialah unit asas storan Elasticsearch.

1.4 Pemetaan: Sama seperti skema dalam pangkalan data hubungan, pemetaan digunakan untuk menentukan jenis dan atribut medan.

2. Pelaksanaan pengesyoran produk
Dalam pengesyoran produk, kita boleh menggunakan skor perkaitan Elasticsearch untuk mencapainya. Langkah-langkah khusus adalah seperti berikut:

2.1 Cipta indeks dan taip
Pertama, kita perlu mencipta indeks untuk menyimpan data produk dan menentukan jenis untuk menerangkan maklumat produk. Anda boleh menggunakan klien PHP yang disediakan oleh Elasticsearch untuk menyambung ke pelayan Elasticsearch dan melaksanakan kod berikut:

require 'vendor/autoload.php';

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

$params = [
    'index' => 'product',
    'body' => [
        'mappings' => [
            'type' => [
                'properties' => [
                    'name' => [
                        'type' => 'text',
                        'analyzer' => 'standard'
                    ],
                    'category' => [
                        'type' => 'keyword'
                    ],
                    'price' => [
                        'type' => 'double'
                    ]
                ]
            ]
        ]
    ]
];

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

2.2 Import data produk
Seterusnya, kami perlu mengimport data produk ke dalam Elasticsearch. Anda boleh menggunakan fungsi sisipan kelompok Elasticsearch untuk mengimport data produk ke dalam Elasticsearch dalam kelompok Kod sampel adalah seperti berikut:

$products = [
    ['name' => 'iPhone 12', 'category' => '手机', 'price' => 7999],
    ['name' => 'MacBook Pro', 'category' => '电脑', 'price' => 10999],
    ['name' => 'AirPods Pro', 'category' => '耳机', 'price' => 1999]
];

$params = [
    'index' => 'product',
    'type' => 'type',
    'body' => []
];

foreach ($products as $product) {
    $params['body'][] = [
        'index' => [
            '_index' => 'product',
            '_type' => 'type'
        ]
    ];
    
    $params['body'][] = $product;
}

$client->bulk($params);

2.3 Pertanyaan pengesyoran produk
Untuk melaksanakan pengesyoran produk, kami boleh membina pertanyaan untuk mencari dan produk lain. dengan korelasi yang lebih tinggi. Kod sampel adalah seperti berikut:

$params = [
    'index' => 'product',
    'type' => 'type',
    'body' => [
        'query' => [
            'more_like_this' => [
                'fields' => ['name'],
                'like' => [
                    ['_index' => 'product', '_id' => '1'] // 假设用户感兴趣的商品编号为 1
                ],
                'min_term_freq' => 1,
                'max_query_terms' => 20
            ]
        ]
    ]
];

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

Kod di atas akan mengembalikan set produk lain yang sangat berkaitan dengan produk yang pengguna minati.

3. Pelaksanaan carian diperibadikan
Carian diperibadikan boleh memberikan pengguna hasil carian yang lebih diperibadikan berdasarkan tabiat dan pilihan carian mereka. Langkah-langkah untuk melaksanakan carian diperibadikan adalah seperti berikut:

3.1 Rekod sejarah carian pengguna
Pertama, kami perlu merekodkan sejarah carian pengguna Anda boleh menggunakan Redis atau pangkalan data untuk menyimpan sejarah carian pengguna. Kod sampel adalah seperti berikut:

$userId = 1; // 假设用户编号为 1
$keyword = 'iPhone';

// 存储用户搜索记录
$redis->sadd("user:$userId:search_history", $keyword);

3.2 Membina pertanyaan carian yang diperibadikan
Berdasarkan sejarah carian pengguna, kami boleh membina pertanyaan yang menggunakan kata kunci yang kerap dicari oleh pengguna sebagai syarat pertanyaan. Kod sampel adalah seperti berikut:

$params = [
    'index' => 'product',
    'type' => 'type',
    'body' => [
        'query' => [
            'bool' => [
                'should' => [
                    ['match' => ['name' => $keyword1]], // 用户搜索历史中的关键词1
                    ['match' => ['name' => $keyword2]], // 用户搜索历史中的关键词2
                    // ...
                ]
            ]
        ]
    ]
];

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

Kod di atas akan mengembalikan hasil carian diperibadikan yang dibina berdasarkan sejarah carian pengguna.

Kesimpulan:
Dengan menggunakan Elasticsearch, kami boleh melaksanakan pengesyoran produk dan fungsi carian yang diperibadikan dengan mudah. Artikel ini memperkenalkan kaedah melaksanakan pengesyoran produk dan carian diperibadikan berdasarkan Elasticsearch, dan menyediakan contoh kod PHP khusus. Saya harap artikel ini dapat memberikan sedikit bantuan kepada pembangun PHP dalam pengesyoran produk dan carian diperibadikan.

Atas ialah kandungan terperinci Pengesyoran produk dan carian diperibadikan berdasarkan Elasticsearch dalam PHP. 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