zoukankan      html  css  js  c++  java
  • lucene&solr学习——solr学习(二) Solr管理索引库

    1.什么是solrJ

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

    依赖jar包:

    2.用solrJ对solr后台进行增删改查

    2.1 添加文档

    //向索引库中添加索引
        @Test
        public void addDocument() throws Exception {
            //和solr服务器创建连接
            //参数:solr服务器的地址
            SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
            //创建一个文档对象
            SolrInputDocument document = new SolrInputDocument();
            //向文档中添加域
            //第一个参数:域的名称,域的名称必须是在schema.xml中定义的
            //第二个参数:域的值
            document.addField("id", "c0001");
            document.addField("title_ik", "使用solrJ添加的文档");
            document.addField("content_ik", "文档的内容");
            document.addField("product_name", "商品名称");
            //把document对象添加到索引库中
            solrServer.add(document);
            //提交修改
            solrServer.commit();
            
        }

    2.2删除文档

    //删除文档,根据id删除
        @Test
        public void deleteDocumentByid() throws Exception {
            //创建连接
            SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
            //根据id删除文档
            solrServer.deleteById("c0001");
            //提交修改
            solrServer.commit();
        }
    //根据查询条件删除文档
        @Test
        public void deleteDocumentByQuery() throws Exception {
            //创建连接
            SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
            //根据查询条件删除文档
            solrServer.deleteByQuery("*:*");
            //提交修改
            solrServer.commit();
        }

    2.3 修改文档

    在solrJ中修改没有对应的update方法,只有add方法,只需要添加一条新的文档,和被修改的文档id一致就,可以修改了。本质上就是先删除后添加。

    2.4 查询文档

      2.4.1 简单查询

      

    //查询索引
        @Test
        public void queryIndex() throws Exception {
            //创建连接
            SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
            //创建一个query对象
            SolrQuery query = new SolrQuery();
            //设置查询条件
            query.setQuery("*:*");
            //执行查询
            QueryResponse queryResponse = solrServer.query(query);
            //取查询结果
            SolrDocumentList solrDocumentList = queryResponse.getResults();
            //共查询到商品数量
            System.out.println("共查询到商品数量:" + solrDocumentList.getNumFound());
            //遍历查询的结果
            for (SolrDocument solrDocument : solrDocumentList) {
                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"));
                
            }
        }

      2.4.2 复杂查询

    //复杂查询索引
        @Test
        public void queryIndex2() throws Exception {
            //创建连接
            SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
            //创建一个query对象
            SolrQuery query = new SolrQuery();
            //设置查询条件
            query.setQuery("钻石");
            //过滤条件
            query.setFilterQueries("product_catalog_name:幽默杂货");
            //排序条件
            query.setSort("product_price", ORDER.asc);
            //分页处理
            query.setStart(0);
            query.setRows(10);
            //结果中域的列表
            query.setFields("id","product_name","product_price","product_catalog_name","product_picture");
            //设置默认搜索域
            query.set("df", "product_keywords");
            //高亮显示
            query.setHighlight(true);
            //高亮显示的域
            query.addHighlightField("product_name");
            //高亮显示的前缀
            query.setHighlightSimplePre("<em>");
            //高亮显示的后缀
            query.setHighlightSimplePost("</em>");
            //执行查询
            QueryResponse queryResponse = solrServer.query(query);
            //取查询结果
            SolrDocumentList solrDocumentList = queryResponse.getResults();
            //共查询到商品数量
            System.out.println("共查询到商品数量:" + solrDocumentList.getNumFound());
            //遍历查询的结果
            for (SolrDocument solrDocument : solrDocumentList) {
                System.out.println(solrDocument.get("id"));
                //取高亮显示
                String productName = "";
                Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
                List<String> list = highlighting.get(solrDocument.get("id")).get("product_name");
                //判断是否有高亮内容
                if (null != list) {
                    productName = list.get(0);
                } else {
                    productName = (String) solrDocument.get("product_name");
                }
                
                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"));
                
            }
        }
  • 相关阅读:
    DB2 关联更新
    postgresql 开启审计日志
    Delphi D10.X中Tpath引发的单元引用及代码编写的思考
    自己写的函数或者过程与Delphi提供的重名了怎么办?(50分)
    技巧四 Delphi XE3 代码自动提示bug解决
    想开发经典界面吗?
    初涉Delphi下Windows消息机制——同一程序内自定义消息实例
    Delphi的DirectShow开发概述
    delphi接口(抄自万一)
    fkInternalCalc和fkCalculated有何区别?
  • 原文地址:https://www.cnblogs.com/FanJava/p/10401510.html
Copyright © 2011-2022 走看看