Lucene的出现次数

时间:2012-06-19 06:46:43

标签: asp.net lucene lucene.net

我在我的网络应用程序中使用Lucene.net。 Everithing工作正常,但现在我必须在hits数组的每个文档中显示我的'searchstring'的出现次数。 我怎样才能做到这一点?我使用通常的BooleanQuery。

这是我的搜索:

BooleanQuery bq = new BooleanQuery();
bq.Add(QueryParser.Parse(Lquery, "", CurIndexDescritor.GetLangAnalizer()), false,false);
            BooleanQuery.SetMaxClauseCount(int.MaxValue);

IndexSearcher searcher = new IndexSearcher(indexPath);
            Hits hits = (filter != null) ? searcher.Search(bq, filter) :         searcher.Search(bq);

 for (int i = 0; i < hits.Length(); i++)
        {
            Document doc = hits.Doc(i);
            SearchResultItem MyDb = new SearchResultItem();
            MyDb.key = doc.Get(KeyField);
            MyDb.score = hits.Score(i);
            result.Add(MyDb);
        }

我在哪里可以获得发生次数?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您不希望得分,并且不想使用分数订购结果,您可以构建自定义Similarity实施。

快速测试了以下代码,它似乎与TermQueries和PhraseQueries一起使用,我没有测试更多的查询类型。 PhraseQuery点击计为单次出现。

public class OccurenceSimilarity : DefaultSimilarity
{
    public override float Tf(float freq)
    {
        return freq;
    }
    public override float Idf(int docFreq, int numDocs)
    {
        return 1;
    }
    public override float Coord(int overlap, int maxOverlap)
    {
        return 1;
    }
    public override float QueryNorm(float sumOfSquaredWeights)
    {
        return 1;
    }
    public override Explanation.IDFExplanation idfExplain(System.Collections.ICollection terms, Searcher searcher)
    {
        return CACHED_IDF_EXPLAIN;
    }
    public override Explanation.IDFExplanation IdfExplain(Term term, Searcher searcher)
    {
        return CACHED_IDF_EXPLAIN;
    }
    public override float SloppyFreq(int distance)
    {
        return 1;
    }
    private static Explanation.IDFExplanation CACHED_IDF_EXPLAIN = new ExplainIt();
    private class ExplainIt : Explanation.IDFExplanation
    {

        public override string Explain()
        {
            return "1";
        }

        public override float GetIdf()
        {
            return 1.0f;
        }
    }
}

使用它:

Similarity.SetDefault(new OccurenceSimilarity());