Ich war Indizierung mit lucene.net in WPF C# und plötzlich bekam das neue jedes neue Dokument wurde anstelle der vorherigen hinzugefügt und damit jeden Moment Anzahl der Dokumente im Index war 1Wie man das Umschreiben des Index Lucene.net C# stoppt?
Ich weiß nicht wie kann Dies geschieht, weil ich die gleichen Methoden zum Hinzufügen in C# -Konsole getestet habe, aber in Formularen ist es nur etwas seltsames passieren
Können Sie nicht vorschlagen, wie Sie das Problem lösen?
Dies ist der Code, wo die Methode Index
private void btnAdd_Click(object sender, RoutedEventArgs e)
{
try
{
LuceneSearch.LuceneEngine le = new LuceneSearch.LuceneEngine();
var engine = new FileEngine();
if (txtboxName.Text != "" && cmbboxDis.SelectedIndex != -1 && btnFile.Content.ToString() != "Choose a file")
{//adds some stuff to DB and returns an object to index
var IndexMe= engine.AddFile(txtboxName.Text, cmbboxDis.SelectedIndex, txtboxAuth.Text, txtboxTags.Text, txtboxComment.Text);
le.BuildIndex(IndexMe);//index this file
this.Close();
}
else
MessageBox.Show("Not all fields are filled", "Oops!", MessageBoxButton.OK, MessageBoxImage.Error);
}
catch (Exception ex)
{
MessageBox.Show("You haven't chosen a file! " +ex.Message, "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
genannt zu schaffen ist, dass die Art und Weise ist, wie es in der Klasse von lucene Methoden sieht
namespace StudentWorksSearch.LuceneSearch
{
public class LuceneEngine
{//get directory
private const string _luceneDir = "../../../Data/lucene_index1";
private FSDirectory _directoryTemp;
private FSDirectory _directory
{
get
{
if (_directoryTemp == null) _directoryTemp = FSDirectory.Open(new
DirectoryInfo(_luceneDir));
if (IndexWriter.IsLocked(_directoryTemp)) IndexWriter.Unlock(_directoryTemp);
var lockFilePath = Path.Combine(_luceneDir, "write.lock");
if (File.Exists(lockFilePath)) File.Delete(lockFilePath);
return _directoryTemp;
}
}
//this method creates document from an ObjectToIndex
public void BuildIndex(FileToIndex file)
{
using (var analyzer = new Lucene.Net.Analysis.Ru.RussianAnalyzer(Version.LUCENE_30))
{
using (IndexWriter idxw = new IndexWriter(_directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED))
{
//check if document exists, if true deletes existing
var searchQuery = new TermQuery(new Term("Id", file.Id.ToString()));
idxw.DeleteDocuments(searchQuery);
//creation
Document doc = new Document();
doc.Add(new Field("Id", file.Id.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));//аналайзер разбивает строки на слова
doc.Add(new Field("Title", file.Title, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("Description", file.Description, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("Authors", file.Authors, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("Text", file.Text, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("Hashtags", file.Hashtags, Field.Store.YES, Field.Index.ANALYZED));
//write the document to the index
idxw.AddDocument(doc);
//optimize and close the writer
idxw.Commit();
idxw.Optimize();
}
}
}
danke so viel !!!! – erkatya90