Hodně jsem o tom přemýšlel a myslím, že nejlepším způsobem by bylo použít 1 index na model a využít zpětné volání, které můžete předat ::search()
Indexování dat
Nejprve musíte použít toSearchableArray()
připravit data. Zrušil bych nastavení všech nepotřebných atributů (jako jsou data) a poté vnořil obsah pod jeho 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"
}
}
Upozorňujeme, že Algolia má limit 10 kB na záznamy. Nejlepší způsob, jak to zvládnout, je zkrátit své největší atributy. Nemějte obavy, nemá to vliv na relevanci . Pokud zmeškáte druhou polovinu svého článku, obvykle je veškerý relevantní obsah již v první části.
Nastavte konfiguraci Algolia na řídicím panelu
Poté přejděte na hlavní panel a přidejte fr
a en
do searchableAttributes
.
Hledat
Můžete omezit searchableAttributes
v době dotazu se zpětným voláním předaným vyhledávání
$lang = 'en';
Model::search($query, function ($algolia, $query, $options) use ($lang) {
$options = array_merge($options, [
'restrictSearchableAttributes' => [$lang],
]);
return $algolia->search($query, $options);
});
Vytvořil jsem vlastnost, abych dosáhl něčeho podobného . Možná můžete udělat něco podobného, abyste měli snadno použitelnou syntaxi jako:
Model::searchLang($lang, $query);
Po tom všem přemýšlení si opravdu myslím, že je to ten nejméně náročný způsob, jak používat Laravel Scout s vašimi omezeními.
Dejte mi prosím vědět, co si myslíte :)