2013-07-10 79 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