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