Mysql
 sql >> база данни >  >> RDS >> Mysql

Многоезични индекси с Laravel Scout и Algolia

Мислех за това много и мисля, че най-добрият начин би бил да използвате 1 индекс на модел и да се възползвате от обратното извикване, което можете да предадете на ::search()

Индексиране на данни

Първо трябва да използвате toSearchableArray() да подготви данните. Бих премахнал всички ненужни атрибути (като дати), след което бих вложил съдържание под неговия ISO.

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

Моля, имайте предвид, че Algolia има ограничение от 10KB на запис. Най-добрият начин да се справите с това е да съкратите най-големите си атрибути. Не се притеснявайте, това не влияе на уместността . Ако пропуснете втората половина на статията си, обикновено цялото подходящо съдържание вече е в първата част.

Настройте конфигурацията на Algolia в таблото за управление

След това се насочете към таблото си и добавете fr и en към searchableAttributes .

Търсене

Можете да ограничите searchableAttributes по време на заявка с обратно извикване, предадено на търсенето

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

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

Създадох черта за постигане на нещо подобно . Може би можете да направите нещо подобно, за да имате лесен за използване синтаксис като:

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

След цялото мислене, наистина мисля, че това е най-малко хакерският начин да използвате Laravel Scout с вашите ограничения.

Моля, уведомете ме какво мислите :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли разлика между тези две заявки?

  2. Методът за удостоверяване „caching_sha2_password“ не се поддържа от нито един от наличните плъгини

  3. Показване на изображения от MySQL база данни в една колона на JTable

  4. Мога ли да използвам повторно израз в MySQL заявка като променлива за друго поле?

  5. Как да предадете параметри на обратно извикване на mysql заявка в nodejs