解决方案 »

  1.   

    好吧,经过一段时间的调查,我自己把问题解决了,说起来解决办法也不是很难,思路就是用lucene的组合查询,
    在组合查询中把取出所有的查询操作放在must中,把要根据关键字排序的条件放在should中,这样返回的结果集就是一个全部的结果,但是由于有should的约束,所以结果集会按照关键字的相关度进行排序(lucene默认的关键字搜索就是按关键字的相关度排序)
    这样,我们就可以得到一个按照给定关键字相关度排序的所有的结果的集合。
    这就是思路,代码如下: QueryBuilder queryBuilder = fullTextSession.getSearchFactory()
        .buildQueryBuilder().forEntity( SearchUser.class ).get();

    luceneQuery = queryBuilder
        .bool()
         .must(
            queryBuilder
                .all()
                .createQuery()
        )
        .should(
            queryBuilder
                .keyword()
                .onFields("searchIndex")
                .matching(queryStr)
                .createQuery()
        ).should(
         queryBuilder
    .keyword()  
        .wildcard()  
        .onField("searchIndex")
        .matching(queryStr+"*")  
        .createQuery()
        )
        .createQuery();
    然后剩下的事情就是调用hibernate search的查询API了