• (转) 淘淘商城系列——使用SolrJ查询索引库


    http://blog.csdn.net/yerenyuan_pku/article/details/72908538

    我们有必要在工程中写查询索引库的代码前先进行必要的测试。我们先到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控制台将打印如下图所示的结果。 

  • 相关阅读:
    设计模式-创建型-原型模式
    设计模式-创建型-抽象工厂模式
    设计模式-创建型-工厂模式
    设计模式-创建型-单例模式
    css3技巧属性之text-overflow
    bootstrap如何自定义5等分
    LeetCode-64-最小路径和
    LeetCode-62-不同路径
    LeetCode-5-最长回文子串
    LeetCode-98-验证二叉搜索树
  • 原文地址:https://www.cnblogs.com/telwanggs/p/6962418.html
Copyright © 2020-2023  润新知