2010-05-14 4 views
0

Situation: J'ai une application ASP .NET qui effectue une recherche dans les documents à l'aide de Lucene. Je veux lancer l'indexation initiale (l'index sera incrémental après l'exécution initiale donc il ne sera pas nécessaire d'indexer le répertoire entier à l'avenir). Actuellement, j'ai environ 5 Go de docs (45000files). Problème: mon application expire avant la fin du processus. J'ai modifié le TimeOut comme ceci:Exécution d'un long processus: indexation de documents 5 Go avec Lucene

HttpContext.Current.Server.ScriptTimeout = 200000;

mais il n'achève toujours pas le processus.

Comment puis-je exécuter l'index?

+0

Quel type d'erreur de timeout est-ce que cela donne? – quillbreaker

+0

Je demande parce que d'habitude quand j'essaye d'empêcher un délai d'attente, il y a fréquemment un certain nombre de manières d'expirer et vous devez les empêcher tous. Ben a un point valable, cependant. Si vous n'avez pas à le faire dans une page Web, ne le faites pas. – quillbreaker

Répondre

3

Vous ne devez pas les exécuter à partir d'ASP.NET. Créez un service qui fait le travail pour vous, et lancez-le via MSMQ, une table "work_queue" dans la base de données, ou tout ce qui est logique dans votre scénario.

Les demandes Web sont destinées à effectuer un travail rapidement et immédiatement, plutôt que d'effectuer un traitement par lots.

+2

+1 pour la suggestion de Ben. Suggère également de regarder dans Solr, il peut prendre soin de plusieurs problèmes pour vous. Vous pouvez interroger Solr à partir d'ASP.NET en utilisant SolrNet. – Mikos

+0

@Mikos - Sur l'un des projets, je ne pouvais pas utiliser Solr car le site était hébergé ailleurs. Mais, j'ai maintenant utilisé Nutch, Solr et SolrNet dans mon dernier projet et cela fonctionne un régal. La documentation n'est pas la meilleure mais les résultats sont exactement ce que je cherchais. – robasta

Questions connexes