Ich habe viel darüber nachgedacht und ich denke, der beste Weg wäre, 1 Index pro Modell zu verwenden und den Rückruf zu nutzen, den Sie an ::search()
übergeben können
Indizierung von Daten
Zuerst müssen Sie toSearchableArray()
verwenden um die Daten aufzubereiten. Ich würde alle unnötigen Attribute (wie Datumsangaben) zurücksetzen und dann den Inhalt unter seiner ISO verschachteln.
{
objectID: 1,
en: {
title: "Title in english",
body: "trucated body in english"
},
fr: {
title: "Titre en français",
body: "contenu tronqué en français"
}
}
Bitte beachten Sie, dass Algolia ein Limit von 10 KB pro Datensatz hat. Der beste Weg, damit umzugehen, besteht darin, Ihre größten Attribute zu kürzen. Keine Sorge, das wirkt sich nicht auf die Relevanz aus . Wenn Sie die zweite Hälfte Ihres Artikels verpassen, sind in der Regel alle relevanten Inhalte bereits im ersten Teil enthalten.
Algolia-Konfiguration im Dashboard einrichten
Gehen Sie dann zu Ihrem Dashboard und fügen Sie fr
hinzu und en
zu den searchableAttributes
.
Suchen
Sie können searchableAttributes
einschränken zur Abfragezeit mit einem an die Suche übergebenen Callback
$lang = 'en';
Model::search($query, function ($algolia, $query, $options) use ($lang) {
$options = array_merge($options, [
'restrictSearchableAttributes' => [$lang],
]);
return $algolia->search($query, $options);
});
Ich habe eine Eigenschaft erstellt, um etwas Ähnliches zu erreichen . Vielleicht können Sie etwas Ähnliches tun, um eine einfach zu verwendende Syntax wie:
zu habenModel::searchLang($lang, $query);
Nach all dem Nachdenken denke ich wirklich, dass es die am wenigsten hackige Art ist, Laravel Scout mit Ihren Einschränkungen zu verwenden.
Bitte lassen Sie mich wissen, was Sie denken :)