Java 在Lucene 4中访问术语统计信息
我有一个Lucene索引,我需要访问一些统计数据,比如术语收集频率Java 在Lucene 4中访问术语统计信息,java,lucene,information-retrieval,language-model,Java,Lucene,Information Retrieval,Language Model,我有一个Lucene索引,我需要访问一些统计数据,比如术语收集频率BasicStats类包含此信息,但是,我无法理解此类是否可访问 可以在Lucene 4中访问BasicStats类吗?BasicStats本身对您没有多大帮助。它所做的只是为你保留价值,它没有任何获取信息的智慧 BasicStats旨在由Similarity实现使用,该实现生成要放入其中的所有信息。它在SimilarityBase中用于执行此操作的方法受到保护,但我们可以利用那里的代码。要填充基本测试,您还需要一个集合统计和一个
BasicStats
类包含此信息,但是,我无法理解此类是否可访问
可以在Lucene 4中访问
BasicStats
类吗?BasicStats
本身对您没有多大帮助。它所做的只是为你保留价值,它没有任何获取信息的智慧
BasicStats
旨在由Similarity
实现使用,该实现生成要放入其中的所有信息。它在SimilarityBase
中用于执行此操作的方法受到保护,但我们可以利用那里的代码。要填充基本测试
,您还需要一个集合统计
和一个术语统计
,但真正需要的是您感兴趣的术语
,以及一个索引阅读器
:
public static BasicStats getBasicStats(IndexReader indexReader, Term myTerm, float queryBoost) throws IOException {
String fieldName = myTerm.field();
CollectionStatistics collectionStats = new CollectionStatistics(
"field",
indexReader.maxDoc(),
indexReader.getDocCount(fieldName),
indexReader.getSumTotalTermFreq(fieldName),
indexReader.getSumDocFreq(fieldName)
);
TermStatistics termStats = new TermStatistics(
myTerm.bytes(),
indexReader.docFreq(myTerm),
indexReader.totalTermFreq(myTerm)
);
BasicStats myStats = new BasicStats(fieldName, queryBoost);
assert collectionStats.sumTotalTermFreq() == -1 || collectionStats.sumTotalTermFreq() >= termStats.totalTermFreq();
long numberOfDocuments = collectionStats.maxDoc();
long docFreq = termStats.docFreq();
long totalTermFreq = termStats.totalTermFreq();
if (totalTermFreq == -1) {
totalTermFreq = docFreq;
}
final long numberOfFieldTokens;
final float avgFieldLength;
long sumTotalTermFreq = collectionStats.sumTotalTermFreq();
if (sumTotalTermFreq <= 0) {
numberOfFieldTokens = docFreq;
avgFieldLength = 1;
} else {
numberOfFieldTokens = sumTotalTermFreq;
avgFieldLength = (float)numberOfFieldTokens / numberOfDocuments;
}
myStats.setNumberOfDocuments(numberOfDocuments);
myStats.setNumberOfFieldTokens(numberOfFieldTokens);
myStats.setAvgFieldLength(avgFieldLength);
myStats.setDocFreq(docFreq);
myStats.setTotalTermFreq(totalTermFreq);
return myStats;
}
publicstats-staticbasicstats-getBasicStats(IndexReader-IndexReader,Term-myTerm,float-queryBoost)抛出IOException{
字符串fieldName=myTerm.field();
CollectionStatistics collectionStats=新的CollectionStatistics(
“字段”,
index reader.maxDoc(),
indexReader.getDocCount(字段名),
indexReader.getSumTotalTermFreq(字段名),
indexReader.getSumDocFreq(字段名)
);
TermStatistics termStats=新的TermStatistics(
myTerm.bytes(),
indexReader.docFreq(myTerm),
indexReader.totalTermFreq(myTerm)
);
BasicStats myStats=新的BasicStats(字段名,查询boost);
断言collectionStats.sumTotalTermFreq()==-1 | | collectionStats.sumTotalTermFreq()>=termStats.totalTermFreq();
long numberOfDocuments=collectionStats.maxDoc();
long docFreq=termStats.docFreq();
long totalTermFreq=termStats.totalTermFreq();
如果(totalTermFreq==-1){
totalTermFreq=docFreq;
}
最终长数字段标记;
最终浮动平均场长;
long-sumTotalTermFreq=collectionStats.sumTotalTermFreq();
如果(sumTotalTermFreq谢谢!queryBoost
参数的值应该是多少?假设我对单个术语的统计信息感兴趣。@EladKravi-这是应用于查询中术语的增强。记住,BasicStats
类的目的是跟踪相似性impl的数据,所以它使用这些统计信息来计算分数。嗯,应该把它变成一个浮点数,实际上。。。