Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 发生次数_Asp.net_Lucene_Lucene.net - Fatal编程技术网

Asp.net 发生次数

Asp.net 发生次数,asp.net,lucene,lucene.net,Asp.net,Lucene,Lucene.net,我正在我的Web应用程序中使用Lucene.net。 一切都很好,但现在我必须显示我的“searchstring”在hits数组的每个文档中出现的次数。 我该怎么做?我使用通常的布尔查询 这就是我的搜索: BooleanQuery bq = new BooleanQuery(); bq.Add(QueryParser.Parse(Lquery, "", CurIndexDescritor.GetLangAnalizer()), false,false); BooleanQ

我正在我的Web应用程序中使用Lucene.net。 一切都很好,但现在我必须显示我的“searchstring”在hits数组的每个文档中出现的次数。 我该怎么做?我使用通常的布尔查询

这就是我的搜索:

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);
        }
BooleanQuery bq=new BooleanQuery();
Add(QueryParser.Parse(Lquery,“,CurIndexDescritor.GetLangAnalizer()),false,false);
BooleanQuery.SetMaxClauseCount(int.MaxValue);
IndexSearcher=newindexSearcher(indexXPath);
点击次数=(过滤器!=空)?searcher.Search(bq,filter):searcher.Search(bq);
对于(int i=0;i
在哪里可以获得发生的次数


谢谢

如果您不想返回分数,也不想使用分数对结果进行排序,那么您可能可以构建一个自定义的
相似性
实现

我快速地测试了下面的代码,它似乎可以很好地处理TermQueries和PhraseQueries,我没有测试更多的查询类型。
PhraseQuery
hit作为一次出现计数

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());

没有内置的方法可以做到这一点,因为通常这些信息几乎没有意义。您可以使用TermFreqVector,但速度会很慢。您是否仍然需要分数和/或希望按分数排序?它具有挖掘功能。这对我很重要。我必须根据我的请求对组织进行评级。请求由组织名称组成。实际上,我将在搜索结果上建立新的索引,然后使用Term request来计算termFreq,这不是一个好主意吗?我能不能让分数变得不那么复杂,而只是多次出现?