2012-07-16 171 views
0

第一次我使用lucene.net。它工作正常。我用jcb geo关键字搜索数据,结果即将到来。我的第一个结果是与JCB关键字相关,并且接下来的几个数据将与GEO关键字一起提供。我只是不明白为什么JCB会进入顶峰。另一方面,最大的结果与GEO有关。我认为GEO的相关数据应该在顶端,然后JCB应该到来。自定义Lucene.net搜索结果

这里我给我用来搜索的代码。

 string multiWordPhrase = ""; 
     multiWordPhrase = txtSearch.Text.Trim().Replace("*", "").Replace("?", "").Replace("~", ""); 
     IndexSearcher searcher = null; 
     List<SearchResult> list = new List<SearchResult>(); 
     SearchResult oSr = null; 

     if (!string.IsNullOrEmpty(multiWordPhrase)) 
     { 
      string[] fieldList = { "Title", "Description", "Url" }; 
      List<BooleanClause.Occur> occurs = new List<BooleanClause.Occur>(); 
      foreach (string field in fieldList) 
      { 
       occurs.Add(BooleanClause.Occur.SHOULD); 
      } 

      searcher = new IndexSearcher(_directory, false); 
      Query qry = MultiFieldQueryParser.Parse(Version.LUCENE_29, multiWordPhrase, fieldList, occurs.ToArray(), new StandardAnalyzer(Version.LUCENE_29)); 
      TopDocs topDocs = searcher.Search(qry, null, ((PageIndex + 1) * PageSize), Sort.RELEVANCE); 
      ScoreDoc[] scoreDocs = topDocs.ScoreDocs; 
      int resultsCount = topDocs.TotalHits; 

      if (topDocs != null) 
      { 
       for (int i = (PageIndex * PageSize); i <= ((PageIndex + 1) * PageSize) && i < topDocs.ScoreDocs.Length; i++) 
       { 
        Document doc = searcher.Doc(topDocs.ScoreDocs[i].doc); 
        oSr = new SearchResult(); 
        oSr.ID = doc.Get("ID"); 
        oSr.Title = doc.Get("Title"); 
        oSr.Description = doc.Get("Description"); 
        //oSr.WordCount = AllExtension.WordCount(oSr.Description, WordExist(oSr.Title, multiWordPhrase)); 
        string preview = 
        oSr.Description = AllExtension.HighlightKeywords(oSr.Description, multiWordPhrase); //sr.Description; 
        oSr.Url = doc.Get("Url"); 
        list.Add(oSr); 
       } 
      } 
      lblMatchFound.Text = "Match Found " + resultsCount.ToString(); 

      Pagination pagination = new Pagination(); 
      pagination.BaseUrl = "/Search.aspx"; 
      pagination.TotalRows = resultsCount; 
      pagination.CurPage = (PageIndex+1); 
      pagination.PerPage = PageSize; 
      pagination.PrevLink = "Prev"; 
      pagination.NextLink = "Next"; 
      pagination.SearchTerm = multiWordPhrase; 
      lblPager.Text = pagination.GetPageLinks(); ; 

      rptResult.DataSource = list; 
      rptResult.DataBind(); 
      searcher.Close(); 

enter image description here

,如果有可能的话请讨论为什么JCB相关数据在上面来了,还告诉我,我怎么能定制搜索结果的结果,这些记录都要在其顶部有去最大搜索词词......像GEO。所以请建议如何自定义我的搜索结果,如果可能的话请附上一些示例代码,因为我是lucene.net中的新成员,因此我可以更好地进行可视化。非常感谢

+0

http://lucene.apache.org/core/3_6_0/api/core/org/apache/lucene/search/Similarity.html – 2012-07-16 09:17:36

回答

1

您需要了解L.B.B.的评分公式。链接以更好地理解分数,并且如果要修改它,则需要实现自己的相似性。

在你的情况下,可能发生的是JCB术语比GEO术语要少得多。包含JCB术语的文件也可能较短。

Additionnaly您还可以使用解释IndexSearcher的方法来查看文档是如何拿下: http://lucene.apache.org/core/old_versioned_docs/versions/2_9_4/api/all/org/apache/lucene/search/IndexSearcher.html#explain(org.apache.lucene.search.Weight, int)

您还可以使用卢克为:http://code.google.com/p/luke/downloads/list

与卢克,你做一个搜索,选择一个结果并单击说明按钮以显示该命中的解释。

+0

可以请你建议如何通过实现我自己的相似性逻辑来改变我的结果顺序。你能指导我一些示例代码吗?我搜索谷歌,发现人们扩展相似类,并使用某些功能,但这些功能对我来说并不明确。 – Thomas 2012-07-17 06:43:23

相关问题