、あなたのインデックスのインデックス文書は、文書のフィールドを持っている「グレードによってレッスン=数学のための学生からの選択」を作成することができます。
あなたの場合、3つのフィールド(学生、レッスン、およびグレード)のドキュメントがあります。これらのドキュメントでインデックスを作成します。
小さな例:
RAMDirectory ramDir = new RAMDirectory();
IndexWriter writer = new IndexWriter(ramDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29));
Document doc = new Document();
Field studentName = new Field("student", "", Field.Store.YES, Field.Index.ANALYZED);
Field lesson = new Field("lesson", "", Field.Store.YES, Field.Index.ANALYZED);
Field grade = new Field("grade","", Field.Store.YES, Field.Index.NOT_ANALYZED);
doc.Add(studentName);
doc.Add(lesson);
doc.Add(grade);
studentName.SetValue("John");
lesson.SetValue("Math");
grade.SetValue("A");
writer.AddDocument(doc);
studentName.SetValue("John");
lesson.SetValue("Chemistry");
grade.SetValue("C");
writer.AddDocument(doc);
studentName.SetValue("Julie");
lesson.SetValue("Math");
grade.SetValue("F");
writer.AddDocument(doc);
studentName.SetValue("Julie");
lesson.SetValue("Chemistry");
grade.SetValue("A");
writer.AddDocument(doc);
writer.Commit();
IndexReader reader = writer.GetReader();
IndexSearcher searcher = new IndexSearcher(reader);
PerFieldAnalyzerWrapper aw = new PerFieldAnalyzerWrapper(new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29));
aw.AddAnalyzer("grade", new KeywordAnalyzer());
Sort sort = new Sort(new SortField("grade", SortField.STRING));
QueryParser qp = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "lesson", aw);
Query q = qp.Parse("chemistry");
TopDocs docs = searcher.Search(q, null, 100, sort);
foreach (var scoreDoc in docs.ScoreDocs)
{
Console.WriteLine("Student: {0}; Lesson: {1}; Grade:{2}",
searcher.Doc(scoreDoc.doc).GetField("student").StringValue(),
searcher.Doc(scoreDoc.doc).GetField("lesson").StringValue(),
searcher.Doc(scoreDoc.doc).GetField("grade").StringValue());
}
Console.WriteLine("");
Console.WriteLine("---");
Console.WriteLine("");
q = qp.Parse("Math");
docs = searcher.Search(q, null, 100, sort);
foreach (var scoreDoc in docs.ScoreDocs)
{
Console.WriteLine("Student: {0}; Lesson: {1}; Grade:{2}",
searcher.Doc(scoreDoc.doc).GetField("student").StringValue(),
searcher.Doc(scoreDoc.doc).GetField("lesson").StringValue(),
searcher.Doc(scoreDoc.doc).GetField("grade").StringValue());
}
Console.Read();
reader.Close();
searcher.Close();
writer.Close();
プリント:
Student: Julie; Lesson: Chemistry; Grade:A
Student: John; Lesson: Chemistry; Grade:C
---
Student: John; Lesson: Math; Grade:A
Student: Julie; Lesson: Math; Grade:F