Lucene 如何检查或分析索引

Lucene 如何检查或分析索引,lucene,lucene.net,Lucene,Lucene.net,我刚开始使用Lucene.Net,但最终目标不是真正实现搜索(至少现在不是),而是能够为文档编制索引,然后分析索引以查找最常出现的术语 例如,我有: Lucene.Net.Analysis.Standard.StandardAnalyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30); var LDoc = new Lucene.Net.Docume

我刚开始使用Lucene.Net,但最终目标不是真正实现搜索(至少现在不是),而是能够为文档编制索引,然后分析索引以查找最常出现的术语

例如,我有:

Lucene.Net.Analysis.Standard.StandardAnalyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
var LDoc = new Lucene.Net.Documents.Document();
LDoc.Add(new Lucene.Net.Documents.Field("header", header, Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.ANALYZED));
LDoc.Add(new Lucene.Net.Documents.Field("summary", summary, Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.ANALYZED));
var ram = new Lucene.Net.Store.RAMDirectory();
using (var iWriter = new Lucene.Net.Index.IndexWriter(ram, analyzer, Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED))
{
    iWriter.AddDocument(LDoc);
}
这是运行的,没有抱怨。但是我没有从我能找到的零散的文档中得到的是我现在如何举例说明索引以查看其中的内容

比方说,我想找出索引中的术语及其频率。有办法吗

编辑:再深入一点,看起来我真正需要看的是一个
索引阅读器
。所以我可以这样做:

using (var iReader = Lucene.Net.Index.IndexReader.Open(ram, true)) 
{
    var tEnumerator = iReader.Terms();
    while (tEnumerator.Next())
    {
        Console.WriteLine("{0} ({1})", tEnumerator.Term, tEnumerator.DocFreq());
    }
}
这将显示每个术语,但是
DocFreq
是它出现在文档中的次数,而不是它出现在任何特定文档中的次数。所以,再仔细研究一下,我真正需要的似乎是:

var vect = iReader.GetTermFreqVectors(0);

但由于某些原因,它总是返回
null
。那么我还缺少什么呢?

GetTermFreqVectors
返回null,因为没有任何字段使用TermVectors编制索引


您可以通过将(例如,
Lucene.Net.Documents.Field.TermVector.YES
)的成员传递到返回
null
的。

中,将其设置为存储TermVector,因为您的字段都没有使用TermVector进行索引。通过将适当的值(例如,
Lucene.Net.Documents.Field.TermVector.YES
)传递到中,可以将其设置为存储TermVector。@femtoRgon:谢谢,您是正确的。如果你给我回信,我会接受的。好的。我不确定这是否完全解决了你剩下的问题,但如果真的解决了,我会继续把它作为一个答案发布。