Java 在Lucene 4中访问术语统计信息

Java 在Lucene 4中访问术语统计信息,java,lucene,information-retrieval,language-model,Java,Lucene,Information Retrieval,Language Model,我有一个Lucene索引,我需要访问一些统计数据,比如术语收集频率BasicStats类包含此信息,但是,我无法理解此类是否可访问 可以在Lucene 4中访问BasicStats类吗?BasicStats本身对您没有多大帮助。它所做的只是为你保留价值,它没有任何获取信息的智慧 BasicStats旨在由Similarity实现使用,该实现生成要放入其中的所有信息。它在SimilarityBase中用于执行此操作的方法受到保护,但我们可以利用那里的代码。要填充基本测试,您还需要一个集合统计和一个

我有一个Lucene索引,我需要访问一些统计数据,比如术语收集频率
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的数据,所以它使用这些统计信息来计算分数。嗯,应该把它变成一个浮点数,实际上。。。