2017-10-19 6 views
0

J'ai un mini site Web avec la recherche Algolia, je veux rechercher l'élément dans le modèle 'Item' (signifie un nom de table 'article'). Ceci est mon code dans le contrôleur:Comment configurer l'index dans le modèle pour la recherche Algolia Laravel

public function search(Request $request) { 
    $query = $request->only(['query']); 

    $items = Item::search($query['query'])->paginate(12); 
    $total = $items->count(); 

    return view('shop.search', [ 
     'items'  => $items, 
     'total'  => $total, 
    ]); 
} 

j'ai pu rechercher courir après le code suivant:

php artisan scout:import "App\Item" 

puis, il fonctionne très bien. Mais lorsque j'insère un nouvel élément, je ne peux pas rechercher ce nouvel élément. J'ai essayé ce code pour configurer "Index" (je pense qu'il peut aider) mais il montre toujours l'erreur :(

public function searchableAs() 
{ 
    return 'posts_index'; 
} 

Et l'erreur est:

Index posts_index does not exist 

ou

indexName is not valid 

Puis-je avoir un moyen de le configurer?

Répondre

1

searchableAs définit votre nom d'index dans Algolia. importé vos données dans l'index items, et vous cherchez dans posts_index. C'est pourquoi vous obtenez cette erreur. Vous devez supprimer le remplacement searchableAs ou réimporter les données.

À propos des données ne sont pas mises à jour, il se pourrait que:

  • Vous utilisez la file d'attente
  • Vous mettez à jour les données sans Eloquent

Si vous exécutez $item->update() il mettra à jour Algolia . Si vous faites Item::update(['title' => 'new title']), vous devrez enchaîner la méthode searchable(). https://laravel.com/docs/5.5/scout#updating-records

+0

Merci, je vais essayer à nouveau; D –

0

Configuration des index de modèle

Chaque modèle est Eloquent synchronisés avec une recherche « index » donné, qui contient tous les documents consultables pour ce modèle. En d'autres termes, vous pouvez penser à chaque index comme une table MySQL. Par défaut, chaque modèle sera conservé dans un index correspondant au nom "table" typique du modèle. Généralement, il s'agit du pluriel du nom du modèle. Cependant, vous êtes libre de personnaliser l'index du modèle en redéfinissant la méthode searchableAs sur le modèle:

<?php 

     namespace App; 

     use Laravel\Scout\Searchable; 
     use Illuminate\Database\Eloquent\Model; 

     class Post extends Model 
     { 
       use Searchable; 

       /** 
       * Get the index name for the model. 
       * 
       * @return string 
       */ 
       public function searchableAs() 
       { 
         return 'posts_index'; 
       } 
} 

Algolia nouvel indice créer « posts_index » et essayer