sql >> Database teknologi >  >> RDS >> Mysql

Multi-sprog indekser med Laravel Scout og Algolia

Jeg tænkte meget over det, og jeg tror, ​​at den bedste måde ville være at bruge 1 indeks pr. model og tage fordel af det tilbagekald, du kan sende til ::search()

Indekseringsdata

Først skal du bruge toSearchableArray() at forberede dataene. Jeg ville deaktivere alle unødvendige attributter (såsom datoer) og derefter indlejre indhold under dets 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"
  }
}

Bemærk venligst, at Algolia har en grænse på 10 KB pr. registrering. Den bedste måde at håndtere dette på er at afkorte dine største egenskaber. Bare rolig, det påvirker ikke relevansen . Hvis du går glip af anden halvdel af din artikel, er alt det relevante indhold som regel allerede i den første bog.

Konfigurer Algolia-konfiguration i dashboard

Gå derefter til dit dashboard og tilføj fr og en til searchableAttributes .

Søg

Du kan begrænse searchableAttributes på forespørgselstidspunktet med et tilbagekald videregivet til søgningen

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

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

Jeg oprettede et træk for at opnå noget lignende . Måske kan du gøre noget lignende, for at få en letanvendelig syntaks som:

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

Efter al den tankegang, synes jeg virkelig, det er den mindst hackede måde at bruge Laravel Scout på med dine begrænsninger.

Fortæl mig venligst, hvad du synes :)




  1. Postgresql json lignende forespørgsel

  2. Skriv session start på 1 side eller alle sider?

  3. Introduktion til PL/SQL-indsamlingsmetoder i Oracle-databasen

  4. Bruger du mysql concat() i WHERE-sætning?