如何检查或分析指标
How to examine or analyze an index
我开始使用 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
。那我还缺少什么?
GetTermFreqVectors
returns 为空,因为 none 您的字段已使用 TermVectors 编制索引。
您可以通过传递 TermVector
enum (ex. Lucene.Net.Documents.Field.TermVector.YES
) into the Field constructor.
的成员来将其设置为存储 TermVectors
我开始使用 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
。那我还缺少什么?
GetTermFreqVectors
returns 为空,因为 none 您的字段已使用 TermVectors 编制索引。
您可以通过传递 TermVector
enum (ex. Lucene.Net.Documents.Field.TermVector.YES
) into the Field constructor.