Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Indeks multi-bahasa dengan Laravel Scout dan Algolia

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 :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Anda men-debug prosedur tersimpan MySQL?

  2. Mengapa GRANT tidak berfungsi di MySQL?

  3. Cara Memilih Semuanya Sebelum/Setelah Karakter Tertentu di MySQL – SUBSTRING_INDEX()

  4. Tabel Migrasi Laravel sudah ada, tetapi saya ingin menambahkan yang baru bukan yang lama

  5. Tabel [nama tabel] tidak terkunci