Eu pensei muito sobre isso e acho que a melhor maneira seria usar 1 índice por modelo e aproveitar o callback que você pode passar para
::search()
Indexação de dados
Primeiro você precisa usar
toSearchableArray()
para preparar os dados. Eu desabilitaria todos os atributos desnecessários (como datas) e aninharia o conteúdo em seu 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"
}
}
Observe que Algolia tem um limite de 10 KB por registros. A melhor maneira de lidar com isso é truncar seus maiores atributos. Não se preocupe, isso não afeta a relevância . Se você perder a segunda metade do seu artigo, geralmente todo o conteúdo relevante já está na primeira metade.
Configure a configuração do Algolia no painel
Em seguida, vá para o seu painel e adicione
fr
e en
para os searchableAttributes
. Pesquisar
Você pode restringir
searchableAttributes
no momento da consulta com um retorno de chamada passado para a pesquisa $lang = 'en';
Model::search($query, function ($algolia, $query, $options) use ($lang) {
$options = array_merge($options, [
'restrictSearchableAttributes' => [$lang],
]);
return $algolia->search($query, $options);
});
Criei uma característica para conseguir algo semelhante . Talvez você possa fazer algo semelhante, para ter uma sintaxe fácil de usar como:
Model::searchLang($lang, $query);
Depois de todo o pensamento, eu realmente acho que é a maneira menos complicada de usar o Laravel Scout com suas restrições.
Por favor, deixe-me saber o que você pensa :)