0

Web アプリで Lucene.net を使用しています。すべてが正常に機能しますが、ヒット配列のすべてのドキュメントで「検索文字列」の出現回数を表示する必要があります。これどうやってするの?通常の 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);
        }

発生回数はどこで取得できますか?

ありがとう!

4

1 に答える 1

2

スコアを戻したくなく、スコアを使用して結果を並べ替えたくない場合は、おそらくカスタムSimilarity実装を構築できます。

次のコードをすぐにテストしましたが、TermQueries と PhraseQueries で問題なく動作するようです。これ以上のクエリ タイプはテストしませんでした。ヒットは1PhraseQuery回の発生としてカウントされます。

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());
于 2012-06-22T00:30:58.813 に答える