我正在我的项目中前进,并来到处理文件内容的十字路口。我已经成功创建了一个包含一些分类字段的工作索引,但我知道希望将关键字搜索应用于文件内容。我的问题是我不确定将 lucene 传递给阅读器是否会转换为索引整个文件内容的 API。我在网上做了一些搜索,发现需要 IFilter 的建议是真的吗?似乎有些复杂。无论如何,我用于索引文件内容的代码在下面并且不起作用(如果通过阅读器,它会失败)。理想情况下,我希望能够处理 doc 和 docx 文件。任何帮助深表感谢。
我的代码创建阅读器
public void setFileText()
{
var FD = new System.Windows.Forms.OpenFileDialog();
StreamReader reader;
if (FD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string fileToOpen = FD.FileName;
reader = new StreamReader(fileToOpen);
}
else
{
reader = null;
}
this.FileText = reader;
}
}
我将文档添加到索引的代码
private static void _addToLuceneIndex(MATS_Doc Data, IndexWriter writer)
{
// remove older index entry
// Query searchQuery = new TermQuery(new Term("Id", Data.Id.ToString()));
// writer.DeleteDocuments(searchQuery);
// add new index entry
Document doc = new Document();
// add lucene fields mapped to db fields
doc.Add(new Field("Id", Data.Id.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
if (!string.IsNullOrEmpty(Data.Title))
doc.Add(new Field("Title", Data.Title, Field.Store.YES, Field.Index.NOT_ANALYZED));
if (!string.IsNullOrEmpty(Data.Plant))
doc.Add(new Field("Plant", Data.Plant, Field.Store.YES, Field.Index.NOT_ANALYZED));
if (!string.IsNullOrEmpty(Data.Containment))
doc.Add(new Field("Containment", Data.Containment, Field.Store.YES, Field.Index.NOT_ANALYZED));
if (!string.IsNullOrEmpty(Data.Part))
doc.Add(new Field("Part", Data.Part, Field.Store.YES, Field.Index.NOT_ANALYZED));
if (!string.IsNullOrEmpty(Data.Operation))
doc.Add(new Field("Operation", Data.Operation, Field.Store.YES, Field.Index.NOT_ANALYZED));
if (!string.IsNullOrEmpty(Data.Geometry))
doc.Add(new Field("Geometry", Data.Geometry, Field.Store.YES, Field.Index.NOT_ANALYZED));
if (Data.FileText != null)
doc.Add(new Field("Text", Data.FileText));
// add entry to index
writer.AddDocument(doc);
}