Saya banyak memikirkannya dan saya pikir cara terbaik adalah menggunakan 1 indeks per model dan memanfaatkan panggilan balik yang dapat Anda teruskan ke ::search()
Data pengindeksan
Pertama, Anda perlu menggunakan toSearchableArray()
untuk menyiapkan datanya. Saya akan menghapus setiap atribut yang tidak perlu (seperti tanggal) kemudian menyarangkan konten di bawah ISO-nya.
{
objectID: 1,
en: {
title: "Title in english",
body: "trucated body in english"
},
fr: {
title: "Titre en français",
body: "contenu tronqué en français"
}
}
Harap dicatat bahwa Algolia memiliki batas 10KB per catatan. Cara terbaik untuk menangani ini adalah dengan memotong atribut terbesar Anda. Jangan khawatir, itu tidak memengaruhi relevansi . Jika Anda melewatkan paruh kedua artikel Anda, biasanya semua konten yang relevan sudah ada di paruh pertama.
Siapkan konfigurasi Algolia di dasbor
Kemudian buka dasbor Anda dan tambahkan fr
dan en
ke searchableAttributes
.
Telusuri
Anda dapat membatasi searchableAttributes
pada waktu kueri dengan panggilan balik yang diteruskan ke penelusuran
$lang = 'en';
Model::search($query, function ($algolia, $query, $options) use ($lang) {
$options = array_merge($options, [
'restrictSearchableAttributes' => [$lang],
]);
return $algolia->search($query, $options);
});
Saya membuat sifat untuk mencapai sesuatu yang serupa . Mungkin Anda dapat melakukan sesuatu yang serupa, untuk mendapatkan sintaks yang mudah digunakan seperti:
Model::searchLang($lang, $query);
Setelah semua pemikiran, saya benar-benar berpikir ini adalah cara yang paling mudah untuk menggunakan Laravel Scout dengan batasan Anda.
Tolong beri tahu saya pendapat Anda :)