淘淘商城——使用SolrJ查询索引库

我们有必要在工程中写查询索引库的代码前先进行必要的测试。我们先到Solr服务页面去简单进行查询,如下图所示,在搜索条件”q”这一栏,我们输入”手机”,分页参数的每页显示条数我们随便写一个数,这里我写的是3,也就是一次只查询三条数据。由于在查询条件一栏没有指定搜索域,因此默认搜索域一定要指定,否则无法查询出数据,我们在Solr服务器的schema.xml文件当中配置了复制域”item_keywords”,我们的默认搜索域便使用复制域”item_keywords”。
这里写图片描述
我们还应知道在天猫或者京东,当搜索出结果后关键字是高亮显示的,我们也应该有高亮显示效果,我们点击”hl”前面的复选框就会展开如下图关于高亮显示的配置,让我们指定要高亮显示的字段以及高亮显示的html代码(在关键字前面和后面都有,比如<em>手机</em>),最后点击”Execute Query”按钮便可以查询到如下图右侧的数据,上面是查询出来的商品列表信息,下面是高亮信息”highlighting”。
这里写图片描述
大家应该注意到下图高亮数据部分有一条查询结果是空的("143771131488369": {}),这是因为这条数据的item_title字段是”121”并没有关键字”手机”,但是在商品分类中有关键字”手机”,于是认为该商品也符合搜索条件(复制域的意思是把各个字段的值都复制到”item_keywords”当中,查询的时候,只要满足其中一个字段的条件便认为是满足条件),但由于”item_title”字段没有关键字”手机”,因此显示的高亮结果是"143771131488369":{}
针对上面的查询条件,我们使用Java测试代码来跑一遍,在taotao-search-service工程的TestSolrJ单元测试类中添加如下测试方法。

@Test
public void testQueryDocument() throws Exception {
    SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr");
    // 创建一个SolrQuery对象
    SolrQuery query = new SolrQuery();
    query.setQuery("手机");
    // 设置自己的分页条件
    query.setStart(0); // 从0开始
    query.setRows(3); // 每页取10条记录
    // 设置默认搜索域
    query.set("df", "item_keywords");
    query.setHighlight(true); // 开启高亮显示
    query.addHighlightField("item_title"); // 添加高亮显示的域
    query.setHighlightSimplePre("<em>"); // 设置高亮显示的前缀
    query.setHighlightSimplePost("</em>"); // 设置高亮显示的后缀
    // 执行查询
    QueryResponse response = solrServer.query(query);
    // 取查询结果
    SolrDocumentList solrDocumentList = response.getResults();
    // 查询结果总记录数
    System.out.println("查询结果总记录数:" + solrDocumentList.getNumFound());
    for (SolrDocument solrDocument : solrDocumentList) {
        System.out.println(solrDocument.get("id"));
        String itemName = null;
        // 取高亮显示
        Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
        List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
        if (list != null && list.size() > 0) {
            itemName = list.get(0); // 将高亮后的结果取出来
        } else {
            itemName = (String) solrDocument.get("item_title");
        }
        System.out.println(itemName);
        System.out.println(solrDocument.get("item_sell_point"));
        System.out.println(solrDocument.get("item_price"));
        System.out.println(solrDocument.get("item_image"));
        System.out.println(solrDocument.get("item_category_name"));
        System.out.println("--------------------------------------------------------------");
    }
}

运行以上方法,Eclipse控制台将打印如下图所示的结果。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/a_blackmoon/article/details/80480155
今日推荐