Jag tänkte mycket på det och jag tror att det bästa sättet skulle vara att använda 1 index per modell och ta del av återuppringningen du kan skicka till ::search()
Indexering av data
Först måste du använda toSearchableArray()
för att förbereda uppgifterna. Jag skulle avaktivera alla onödiga attribut (som datum) och sedan kapsla innehåll under dess 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"
}
}
Observera att Algolia har en gräns på 10 KB per post. Det bästa sättet att hantera detta är att trunkera dina största attribut. Oroa dig inte, det påverkar inte relevansen . Om du missar den andra halvan av din artikel finns vanligtvis allt relevant innehåll redan i den första häftet.
Konfigurera Algolia-konfigurationen i instrumentpanelen
Gå sedan till din instrumentpanel och lägg till fr
och en
till searchableAttributes
.
Sök
Du kan begränsa searchableAttributes
vid frågetid med en återuppringning som skickades till sökningen
$lang = 'en';
Model::search($query, function ($algolia, $query, $options) use ($lang) {
$options = array_merge($options, [
'restrictSearchableAttributes' => [$lang],
]);
return $algolia->search($query, $options);
});
Jag skapade en egenskap för att uppnå något liknande . Kanske kan du göra något liknande, för att få en lättanvänd syntax som:
Model::searchLang($lang, $query);
Efter allt tänkande tycker jag verkligen att det är det minst hackiga sättet att använda Laravel Scout med dina begränsningar.
Låt mig veta vad du tycker :)