Lucene.net如何排序和查询KeyValuePair数据类型

Lucene.net如何排序和查询KeyValuePair数据类型,lucene,lucene.net,Lucene,Lucene.net,我正试图找到一个关于索引查询以下模型的解决方案: 学生有很多课,每节课有一个年级。然而,课程等级是一个键值对 我的第一个问题是: 我应该如何在lucene中索引键值数据?(它就像一个 坐标可能是空间的?) 第二个是 假设我在lucene中有一个索引数据。我如何查询学生 课程名称,但按年级排序 我可以创建一个类似的查询吗?“从学生那里选择课程=按年级的数学顺序”sql短语在Lucene中,你在索引中索引文档,文档有字段 在您的情况下,您将有一个包含3个字段的文档:学生、课程和年级。然后用这些文档填

我正试图找到一个关于索引查询以下模型的解决方案: 学生有很多课,每节课有一个年级。然而,课程等级是一个键值对

我的第一个问题是:

我应该如何在lucene中索引键值数据?(它就像一个 坐标可能是空间的?)

第二个是

假设我在lucene中有一个索引数据。我如何查询学生 课程名称,但按年级排序


我可以创建一个类似的查询吗?“从学生那里选择课程=按年级的数学顺序”sql短语

在Lucene中,你在索引中索引文档,文档有字段

在您的情况下,您将有一个包含3个字段的文档:学生、课程和年级。然后用这些文档填充索引

小例子:

RAMDirectory ramDir=new RAMDirectory();
IndexWriter writer=新的IndexWriter(ramDir,新的标准分析器(Lucene.Net.Util.Version.Lucene_29));
单据单据=新单据();
Field studentName=新字段(“学生”,“Field.Store.YES,Field.Index.analysisted”);
字段课程=新字段(“课程”,“”,Field.Store.YES,Field.Index.analysis);
字段等级=新字段(“等级”,“”,Field.Store.YES,Field.Index.未分析);
添加文件(学生姓名);
文件添加(课程);
文件添加(等级);
studentName.SetValue(“约翰”);
SetValue(“数学”);
等级。设定值(“A”);
writer.AddDocument(doc);
studentName.SetValue(“约翰”);
课程设置值(“化学”);
等级。设定值(“C”);
writer.AddDocument(doc);
studentName.SetValue(“朱莉”);
SetValue(“数学”);
等级。设定值(“F”);
writer.AddDocument(doc);
studentName.SetValue(“朱莉”);
课程设置值(“化学”);
等级。设定值(“A”);
writer.AddDocument(doc);
writer.Commit();
IndexReader=writer.GetReader();
IndexSearcher search=新的IndexSearcher(阅读器);
PerfielDanalyzerRapper aw=新的PerfielDanalyzerRapper(新的标准分析器(Lucene.Net.Util.Version.lucene29));
aw.AddAnalyzer(“grade”,新关键字Analyzer());
Sort Sort=new Sort(new SortField(“grade”,SortField.STRING));
QueryParser qp=新的QueryParser(Lucene.Net.Util.Version.Lucene_29,“课程”,aw);
查询q=qp.Parse(“化学”);
TopDocs=searcher.Search(q,null,100,sort);
foreach(docs.ScoreDocs中的var scoreDoc)
{
WriteLine(“学生:{0};课程:{1};成绩:{2}”,
searcher.Doc(scoreDoc.Doc).GetField(“学生”).StringValue(),
searcher.Doc(scoreDoc.Doc).GetField(“课程”).StringValue(),
searcher.Doc(scoreDoc.Doc).GetField(“grade”).StringValue();
}
控制台。写线(“”);
Console.WriteLine(“--”);
控制台。写线(“”);
q=qp.Parse(“数学”);
docs=searcher.Search(q,null,100,sort);
foreach(docs.ScoreDocs中的var scoreDoc)
{
WriteLine(“学生:{0};课程:{1};成绩:{2}”,
searcher.Doc(scoreDoc.Doc).GetField(“学生”).StringValue(),
searcher.Doc(scoreDoc.Doc).GetField(“课程”).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
Student: Julie; Lesson: Chemistry; Grade:A
Student: John; Lesson: Chemistry; Grade:C

---

Student: John; Lesson: Math; Grade:A
Student: Julie; Lesson: Math; Grade:F