Solr之分组查询facet

用户查询之后通过点击分组,能继续缩小搜索范围,来定位自己想要的内容,效果图入下:

Solr之分组查询facet_第1张图片


Solrj 代码

/**
 * 一个演示方法,根据查询关键词查询结果,连带查结果对应的栏目分组情况 。
 * 
 * @param kw 搜索词
 */
public static void query(String kw) {
    SolrQuery query = new SolrQuery();
    query.setQuery("title:" + kw);

    // 开启facet查询
    query.setFacet(true)
    // 设置没有结果的栏目不显示
            .setFacetMinCount(1)
            // 设置根据栏目id进行facet查询
            .addFacetField("catalog_id");

    try {
        QueryResponse rsp = solrServer4Article.query(query);
        // 搜索的结果
        SolrDocumentList docs = rsp.getResults();
        // 搜索结果对应的分组
        List<Count> list = rsp.getFacetField("catalog_id").getValues();
        for (Count count : list) {
            System.out.println(count.getName() + "->" + count.getCount());
        }

    } catch (Exception e) {
        log.error("从solr根据Page查询分页文档时遇到错误", e);
    }
}

输出结果

10 ->25
1 ->1
5 ->1

我的搜索词是“mysql”,说明对于搜索结果,栏目10(mysql)有结果25条,栏目1(系列)有结果1条,栏目5(solr)有1条,那么这时你就可以根据这个结果,继续缩小你的搜索范围了。


相关说明

有时候需要设置多个分组,那么只需要针对不同的属性增加.addFacetField("属性名");即可,如在京东上搜“手机”
Solr之分组查询facet_第2张图片


转至:http://www.devnote.cn/article/301.html

你可能感兴趣的:(Solr,Lucene,全文检索)