如何检查或分析索引

时间:2015-12-11 15:29:32

标签: 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.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);
}

这样运行并没有抱怨。但是,我从能够找到的参差不齐的文档中得到的是我现在可以如何通过索引来看看它中的内容。

比方说,我想用它们的频率来确定索引中的哪些术语。有没有办法做到这一点?

修改:多挖一点,我真正需要看的是IndexReader。所以我可以这样做:

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。那么我还缺少什么?

1 个答案:

答案 0 :(得分:2)

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

您可以通过将TermVector enum(例如Lucene.Net.Documents.Field.TermVector.YES)的成员传递到Field constructor来将其设置为存储TermVectors。