2 votes

Les documents s'affichent après un certain délai dans Solr 3.6

Nous travaillons avec Solr 3.6 pour une application ASP.net. Nous utilisons la bibliothèque SolrNet.

Nous avons un programme personnalisé écrit en asp.net pour ajouter de manière incrémentielle un document à Solr en utilisant SolrNet. Ce programme surveille la progression de l'insertion des documents dans Solr.

Le problème est que l'application indique que le processus est terminé, mais en vérifiant les résultats de Solr, nous ne voyons que quelques documents dans les résultats, et pas tous les documents. Bien que nous l'ayons vérifié à nouveau après 15 minutes, quelques documents supplémentaires sont maintenant répertoriés dans les résultats Solr, qui sont environ le double des résultats initiaux. Notez que nous n'avons exécuté aucun processus pour ajouter des documents dans Solr.

Est-il naturel avec Solr ? Ou peut-on supposer que tous les documents sont listés dès qu'ils sont insérés et validés ? Quelle est la raison de ce type de comportement ? Et comment le gérer ?

Edit 1 Après une heure du côté de l'application, nous sommes en mesure d'interroger 80-90% des documents. Mais toujours Solr Admin Query ne liste pas plus de 25% des documents.

3voto

Paige Cook Points 13415

Est-ce que vous envoyez un commit à Solr après que votre programme ASP.NET personnalisé ait fini d'ajouter des documents à Solr ? En effet, vos nouveaux documents ne seront pas visibles pour les chercheurs dans Solr tant que vous n'aurez pas validé l'index.

 var solr = ServiceLocator.Current.GetInstance<ISolrOperations<IndexEntry>>();
 solr.Add(entry);   
 solr.Commit();         

Je suppose que les documents apparaissent au bout d'un certain temps parce que votre instance Solr est configurée avec une sorte d'interface utilisateur. <autoCommit> dans votre fichier solrconfig.xml. Voir aquí pour plus de détails

Une chose à essayer est de passer un paramètre "soft-commit" via SolrNet pour indiquer à l'index le délai de validation du nouveau document que vous avez ajouté à l'index. Voici un petit extrait de code qui montre l'utilisation du paramètre "soft-commit". CommitWithin AddParameter qui indique à Solr de livrer le document dans les 5 secondes.

var solr = ServiceLocator.Current.GetInstance<ISolrOperations<IndexEntry>>();
solr.Add(entry, new AddParameters { CommitWithin = 5000 });            

Je recommande l'utilisation de la CommitWithin par rapport au paramètre explicite Commit() car les commits sont des opérations coûteuses et Solr peut mieux les gérer lui-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X