J'ai appris en lisant la documentation disponible qu'une instance IndexSearcher doit être partagée entre les recherches, pour des performances optimales, et qu'une nouvelle instance doit être créée pour charger toutes les modifications apportées à l'index. Cela implique que l'index est accessible en écriture (en utilisant IndexWriter) après avoir créé une instance de IndexSearcher qui pointe vers le même répertoire. Cependant, ce n'est pas le comportement que je vois dans mon implémentation de Lucene.Net. J'utilise FSDirectory. RAMDirectory n'est pas une option viable. IndexSearcher verrouille l'un des fichiers d'index (dans mon implémentation c'est le fichier _1.cfs) rendant l'index non-modifiable pendant la durée de vie de l'instance IndexSearcher.Lucene IndexSearcher verrouille l'index causant IOException lors de la reconstruction
Est-ce un comportement connu? Je ne peux pas reconstruire l'index à partir de zéro en utilisant une instance IndexSearcher créée avant la reconstruction? Est-il seulement possible de modifier l'index, mais pas de le reconstruire?
Voici comment je crée l'instance IndexSearcher:
// Create FSDirectory
var directory = FSDirectory.GetDirectory(storagePath, false);
// Create IndexReader
var reader = IndexReader.Open(directory);
// I get the same behaviour regardless of whether I close the directory or not.
directory.Close();
// Create IndexSearcher
var searcher = new IndexSearcher(reader);
// Closing the reader will cause "object reference not set..." when searching.
//reader.Close();
Voici comment je crée le IndexWriter:
var directory = FSDirectory.GetDirectory(storagePath, true);
var indexWriter = new IndexWriter(directory, new StandardAnalyzer(), true);
J'utilise la version 2.0 Lucene.Net.
Edit:
Mise à niveau vers Lucene.Net 2.1 (thx KENE) et de modifier légèrement la façon dont je crée mon IndexWriter a résolu le problème:
var directory = FSDirectory.GetDirectory(storagePath, false);
var indexWriter = new IndexWriter(directory, new StandardAnalyzer(), true);
Merci beaucoup pour répondre. Je vais essayer et voir si cette version fait ce qui est promis. – Marcus