2013-07-10 52 views
3

我想基于我们的数据进行搜索页面。这是我的代码。lucene - 最相关的搜索和排序结果

  SortField sortField = new SortField(TEXT_FIELD_RANK, SortField.Type.INT, true); 
     Sort sort = new Sort(sortField); 
     Query q = queryParser.parse(useQuery); 
     TopDocs topDocs = searcher.search(q, totalLimit, sort); 
     ScoreDoc[] hits = topDocs.scoreDocs; 
     log.info("totalResults="+ topDocs.totalHits); 
     int index = getStartIndex(start, maxReturn); 
     int resultsLength = start * maxReturn; 
     if (resultsLength > totalLimit) { 
      resultsLength = totalLimit; 
     } 
     log.info("index:"+ index + "==resultsLength:"+ resultsLength); 
     for (int i = index; i < resultsLength; ++i) { 

     } 

基本上,这是我的要求。如果有完全匹配,我需要显示完全匹配。如果没有完全匹配,我需要按字段对结果进行排序。所以我检查for循环内的完全匹配。

但是在我看来,无论结果如何,它都会对结果进行排序,所以即使有完全匹配,也不会显示在第一页。

谢谢。

回答

2

您将其设置为按照字段值进行排序,而不是在相关性上进行排序,因此不能保证最佳匹配将位于第一页。您可以通过相关性排序第一,然后在你的字段的值,如:

Sort sort = new Sort(SortField.FIELD_SCORE, sortField); 

如果那是你所期待的。否则,如果您希望忽略除直接匹配之外的任何关联性,则可以先使用更严格的(完全匹配)查询进行查询,然后将完全匹配项作为完全独立的结果集进行查询。

+0

感谢您的意见。 – user826323