lucene - 最相关的搜索和排序结果

时间:2013-07-10 20:23:25

标签: 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循环内部的完全匹配。

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

感谢。

1 个答案:

答案 0 :(得分:2)

您将其设置为对字段值排序,而不是相关性,因此无法保证最佳匹配位于第一页。您可以先按相关性排序,然后按字段值排序,例如:

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

如果那就是你要找的东西。

否则,如果您希望忽略除直接匹配之外的任何内容的相关性,您可以先使用限制性更强(完全匹配)的查询进行查询,将完全匹配作为完全独立的结果集进行查询。