1

我正在将我们的搜索引擎升级到 Lucene.Net 3.0.3.0。此外,我正在彻底修改我们网站的搜索引擎,因为评分存在一些问题。所以我(再次)从头开始构建它。让我感到奇怪的第一件事是得分值是不可理解的。在以前的 Lucene 版本中,我使用它返回 0 到 1 之间的分数,这些分数很容易转换为百分比。升级后,我得到了无法转换为百分比的得分值。

第一个版本仅包含仅包含名称字段和 ID 字段的文档,我将使用以下代码添加:

文档文档 = 新文档();doc.Add(new Field("ID", studie.ID.ToString(), Field.Store.YES, Field.Index.NO)); doc.Add(new Field("indexNaam", studie.Naam.Replace("-", "").ToLower(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO));

对于搜索,我使用以下代码: string strIndexDir = @"C:\deploys\deploy3\live\index_studies2"; Analyzer std = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30); //TermQuery qry = new TermQuery(new Lucene.Net.Index.Term("indexNaam", trefwood)); Lucene.Net.QueryParsers.QueryParser 解析器 = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_30, "indexNaam", std); Lucene.Net.Search.Query qry = parser.Parse(trefwood); BooleanQuery bln = new BooleanQuery();

  Lucene.Net.Store.Directory directory = Lucene.Net.Store.FSDirectory.Open(new System.IO.DirectoryInfo(strIndexDir)); //Provide the directory where index is stored
  Lucene.Net.Search.Searcher srchr = new Lucene.Net.Search.IndexSearcher(Lucene.Net.Index.IndexReader.Open(directory, true));

  TopScoreDocCollector cllctr = TopScoreDocCollector.Create(100, true);
  bln.Add(qry,Occur.MUST);
  srchr.Search(bln, cllctr);

  ScoreDoc[] hits = cllctr.TopDocs().ScoreDocs;

  for (int i = 0; i < hits.Length; i++)
  {

    int docId = hits[i].Doc;
    float score = hits[i].Score;
    Lucene.Net.Documents.Document doc = srchr.Doc(docId);
    Studie studie =
      new Studie
      {
        ID = doc.Get("ID"),
        Naam = doc.Get("Naam"),
        ActualScore = score.ToString(),
        Score = System.Math.Round(score).ToString()
      };

   studies.Add(studie);

  }

我还收集了评分说明,并注意到逆文档频率 (idf) 现在决定了 Score 属性的值。有没有一种很好的方法来检索百分比得分值,为什么会改变?

提前致谢。

4

0 回答 0