私は自分のプロジェクトに沿って移動しており、ファイルの内容を扱う岐路に立っています。いくつかの分類フィールドを持つ作業インデックスを正常に作成しましたが、ファイルの内容にキーワード検索を適用したいと考えています。私の問題は、リーダーに 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);
}