zoukankan      html  css  js  c++  java
  • Solr第二讲——SolrJ客户端的使用与案例

    一、Solrj的使用

      1.什么是Solrj

      solrj是访问Solr服务的java客户端(就像通过jedis操作redis一样),提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图:

      

      2.如何使用

         需要的是solrj的包与拓展服务包

        

        使用solrj完成索引的维护:

        在solr中,索引库中都会存在一个唯一键,如果一个Document的id存在,则执行修改操作,如果不存在,则执行添加操作。

          添加/修改索引:   

        1、 创建HttpSolrServer对象,通过它和Solr服务器建立连接。

        2、 创建SolrInputDocument对象,然后通过它来添加域。

        3、 通过HttpSolrServer对象将SolrInputDocument添加到索引库。

        4、 提交。

    @Test
        public void addDocument() throws Exception {
    
            // 1、 创建HttpSolrServer对象,通过它和Solr服务器建立连接。
            // 参数:solr服务器的访问地址
            HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/");
            // 2、 创建SolrInputDocument对象,然后通过它来添加域。
            SolrInputDocument document = new SolrInputDocument();
            // 第一个参数:域的名称,域的名称必须是在schema.xml中定义的
            // 第二个参数:域的值
            // 注意:id的域不能少
            document.addField("id", "c0001");
            document.addField("title_ik", "使用solrJ添加的文档");
            document.addField("content_ik", "文档的内容");
            document.addField("product_name", "商品名称");
            // 3、 通过HttpSolrServer对象将SolrInputDocument添加到索引库。
            server.add(document);
            // 4、 提交。
            server.commit();
        }
    View Code

          在界面查询索引查看效果:使用域名:名称,例如 id:c001的格式

        

           根据ID删除索引

    @Test
        public void deleteDocument() throws Exception {
            // 1、 创建HttpSolrServer对象,通过它和Solr服务器建立连接。
            // 参数:solr服务器的访问地址
            HttpSolrServer server = new HttpSolrServer(
                    "http://localhost:8080/solr/");
            // 根据ID删除
            server.deleteById("c0001");
            // 提交
            server.commit();
        }
    View Code

          根据条件删除

    @Test
        public void deleteDocumentByQuery() throws Exception {
            // 1、 创建HttpSolrServer对象,通过它和Solr服务器建立连接。
            // 参数:solr服务器的访问地址
            HttpSolrServer server = new HttpSolrServer(
                    "http://localhost:8080/solr/");
            // 根据ID删除
            server.deleteByQuery("id:c0001");
            // 全部删除
            // server.deleteByQuery("*:*");
            // 提交
            server.commit();
        }
    View Code

          查询索引

    @Test
        public void queryIndex() throws Exception {
            // 创建HttpSolrServer对象,通过它和Solr服务器建立连接。
            // 参数:solr服务器的访问地址
            HttpSolrServer server = new HttpSolrServer(
                    "http://localhost:8080/solr/");
    
            // 创建SolrQuery对象
            SolrQuery query = new SolrQuery();
            // 设置查询条件,名称“q”是固定的且必须 的
            query.set("q", "id:2");
    
            // 调用server的查询方法,查询索引库
            QueryResponse response = server.query(query);
    
            // 查询结果
            SolrDocumentList results = response.getResults();
    
            // 查询结果总数
            long cnt = results.getNumFound();
            System.out.println("查询结果总数:" + cnt);
    
            for (SolrDocument solrDocument : results) {
                System.out.println(solrDocument.get("id"));
                System.out.println(solrDocument.get("product_name"));
                System.out.println(solrDocument.get("product_price"));
                System.out.println(solrDocument.get("product_catalog_name"));
                System.out.println(solrDocument.get("product_picture"));
    
            }
        }
    View Code

          复杂查询

    @Test
        public void queryIndex2() throws Exception {
            // 创建HttpSolrServer对象,通过它和Solr服务器建立连接。
            // 参数:solr服务器的访问地址
            HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/");
    
            // 创建SolrQuery对象
            SolrQuery query = new SolrQuery();
    
            // 设置查询条件
            query.setQuery("钻石");
            // 设置过滤条件
            query.setFilterQueries("product_catalog_name:幽默杂货");
            // 设置排序
            query.setSort("product_price", ORDER.desc);
            // 设置分页信息
            query.setStart(0);
            query.setRows(10);
    
            // 设置显得的域的列表
            query.setFields("id", "product_name", "product_price",
                    "product_catalog_name", "product_picture");
    
            // 设置默认搜索域
            query.set("df", "product_name");
    
            // 设置高亮
            query.setHighlight(true);
            query.addHighlightField("product_name");
            query.setHighlightSimplePre("<em>");
            query.setHighlightSimplePost("</em>");
    
            // 调用server的查询方法,查询索引库
            QueryResponse response = server.query(query);
    
            // 查询结果
            SolrDocumentList results = response.getResults();
    
            // 查询结果总数
            long cnt = results.getNumFound();
            System.out.println("查询结果总数:" + cnt);
    
            for (SolrDocument solrDocument : results) {
                System.out.println(solrDocument.get("id"));
    
                String productName = (String) solrDocument.get("product_name");
    
                //获取高亮列表
                Map<String, Map<String, List<String>>> highlighting = response
                        .getHighlighting();
                //获得本文档的高亮信息
                List<String> list = highlighting.get(solrDocument.get("id")).get(
                        "product_name");
                //如果有高亮,则把商品名称赋值为有高亮的那个名称
                if (list != null) {
                    productName = list.get(0);
                }
    
                System.out.println(productName);
                System.out.println(solrDocument.get("product_price"));
                System.out.println(solrDocument.get("product_catalog_name"));
                System.out.println(solrDocument.get("product_picture"));
    
            }
        }
    View Code
  • 相关阅读:
    Ubuntu设置默认编辑器
    Java基础学习之(15)
    Java基础学习之(9)--java的常用类
    Java基础学习之(11)--异常处理
    Java基础学习之(10)--接口
    Java基础学习之(8)--多态和抽象类
    Java基础学习之(7)--Object类
    Java基础学习之(6)--继承、访问权限、重写
    dubbo-整合springboot、基于注解的简单实例
    java安全框架之Permission学习笔记
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7494364.html
Copyright © 2011-2022 走看看