Lorsque j'utilise Lucene.Net avec ASP.NET, j'imagine qu'une requête Web peut déclencher une mise à jour de l'index pendant qu'une autre requête Web effectue une recherche. Est-ce que Lucene.Net a intégré la possibilité de gérer l'accès simultané, ou dois-je le gérer, pour éviter d'être "utilisé par un autre processus"?Lucene.Net gère-t-il plusieurs threads accédant au même index, l'un indexant pendant que l'autre recherche?
EDIT: Après avoir lu des documents et expérimenté, voici ce que je pense avoir appris: Il y a deux problèmes, la sécurité des threads et la simultanéité. Le multithreading est "sûr" en ce sens que vous ne pouvez rien faire de mal à l'index. Mais, il est sûr au prix d'un seul objet ayant un verrou sur l'index en même temps. Le deuxième objet viendra et lèvera une exception. Ainsi, vous ne pouvez pas laisser une recherche ouverte et attendre un écrivain dans un autre thread pour pouvoir mettre à jour l'index. Et si un thread est occupé à mettre à jour l'index, essayer de créer un chercheur échouera. En outre, les chercheurs voient l'index tel qu'il était au moment où ils l'ouvrent, donc si vous les gardez et mettez à jour l'index, ils ne verront pas les mises à jour.
Je voulais que mes chercheurs voient les dernières mises à jour. Ma conception, et cela semble fonctionner jusqu'à maintenant, est que mes rédacteurs et mes chercheurs partagent un verrou, de sorte qu'ils n'échouent pas - ils attendent simplement - jusqu'à ce que l'écriture ou la recherche en cours soit terminée.
Pourriez-vous expliquer comment avez-vous implémenté les verrous? Utilisez-vous des verrous en lecture et en écriture ou juste un verrou partagé? –
Un verrou partagé. J'ai écrit ce que j'ai fait: http://ifdefined.com/blog/post/Full-Text-Search-in-ASPNET-using-LuceneNET.aspx –
Ce que vous dites dans votre question est faux: "Donc, vous pouvez Ne laissez pas une recherche ouverte et attendez un écrivain dans un autre thread pour être en mesure de mettre à jour l'index.Et si un thread est occupé à mettre à jour l'index, alors essayer de créer un chercheur échouera. " Comme mentionné dans les autres réponses: "Un graveur d'index ou un lecteur peut éditer les fichiers d'index lucene pendant que les recherches sont en cours" et vice-versa. –