Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chỉ mục đa ngôn ngữ với Laravel Scout và Algolia

Tôi đã nghĩ về nó rất nhiều và tôi nghĩ rằng cách tốt nhất là sử dụng 1 chỉ mục cho mỗi mô hình và lấy tiền của lệnh gọi lại mà bạn có thể chuyển đến ::search()

Dữ liệu lập chỉ mục

Trước tiên, bạn cần sử dụng toSearchableArray() để chuẩn bị dữ liệu. Tôi sẽ bỏ đặt mọi thuộc tính không cần thiết (như ngày tháng), sau đó lồng nội dung vào ISO của nó.

{
  objectID: 1,
  en: {
    title: "Title in english",
    body: "trucated body in english"
  },
  fr: {
    title: "Titre en français",
    body: "contenu tronqué en français"
  }
}

Xin lưu ý rằng Algolia có giới hạn 10KB cho mỗi bản ghi. Cách tốt nhất để xử lý điều này là cắt bớt các thuộc tính lớn nhất của bạn. Đừng lo lắng, điều đó không ảnh hưởng đến mức độ liên quan . Nếu bạn bỏ lỡ nửa sau của bài viết, thường thì tất cả nội dung liên quan đã có ở phần đầu tiên.

Thiết lập cấu hình Algolia trong trang tổng quan

Sau đó đi đến trang tổng quan của bạn và thêm fren vào searchableAttributes .

Tìm kiếm

Bạn có thể hạn chế searchableAttributes tại thời điểm truy vấn với một lệnh gọi lại được chuyển đến tìm kiếm

$lang = 'en';
Model::search($query, function ($algolia, $query, $options) use ($lang) {
    $options = array_merge($options, [
        'restrictSearchableAttributes' => [$lang],
    ]);

    return $algolia->search($query, $options);
});

Tôi đã tạo một đặc điểm để đạt được điều gì đó tương tự . Có thể bạn có thể làm điều gì đó tương tự, để có cú pháp dễ sử dụng như:

Model::searchLang($lang, $query);

Sau tất cả những suy nghĩ, tôi thực sự nghĩ rằng đó là cách ít hack nhất để sử dụng Laravel Scout với những ràng buộc của bạn.

Hãy cho tôi biết suy nghĩ của bạn :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trong CentOS7, không thể khởi động MySQL

  2. Hiệu suất MySQL DigitalOcean tốt nhất - ScaleGrid so với Cơ sở dữ liệu được quản lý DigitalOcean

  3. Lưu trữ hình ảnh trong cơ sở dữ liệu trực tiếp hay dưới dạng dữ liệu base64?

  4. Loại MySQL ENUM so với các bảng tham gia

  5. apache mysql - gói không có thứ tự trên 3306