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

4
我正在尝试基于我们拥有的数据创建一个搜索页面。以下是我的代码。
            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个回答

2

您将其设置为按字段值排序,而不是按相关性排序,因此不能保证最佳匹配项在第一页上。您可以先按相关性排序,然后再按您的字段值排序,如下所示:

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

如果这正是您在寻找的内容。

否则,如果您只想查找与查询完全匹配的结果,您可以首先使用更严格(精确匹配)的查询来获取您的精确匹配作为一个完全独立的结果集。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接