五、在项目中利用SolrJ客户端对索引进行增、删、改、查

(一)引入相关依赖

        <!--solr的java客户端-->
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>4.10.4</version>
        </dependency>
        <!--SolrJ的相关依赖-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.7.24</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jul-to-slf4j</artifactId>
            <version>1.7.24</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

(二)增、删、改、查

1、增

/**
     * 增加索引
     * @throws IOException
     * @throws SolrServerException
     */
    @Test
    public void testCreateIndex() throws IOException, SolrServerException {
        String baseUrl = "http://localhost:8080/solr";
        //连接solr服务器(单机版)
        SolrServer solrServer = new HttpSolrServer(baseUrl);
        //添加
        SolrInputDocument doc = new SolrInputDocument();
        doc.setField("id", "4");
        doc.setField("name", "潘4");
        solrServer.add(doc);
        //手动提交
        solrServer.commit();
    }

2、删

/**
     * 删除
     * @throws IOException
     * @throws SolrServerException
     */
    @Test
    public void testDeleteIndex() throws IOException, SolrServerException {
        String baseUrl = "http://localhost:8080/solr";
        //连接solr服务器(单机版)
        SolrServer solrServer = new HttpSolrServer(baseUrl);
        //删除
        String query = "id:1";
        solrServer.deleteByQuery(query, 1000);
    }

3、改

/**
     * 更新
     * @throws IOException
     * @throws SolrServerException
     */
    @Test
    public void testUpdateIndex() throws IOException, SolrServerException {
        String baseUrl = "http://localhost:8080/solr";
        //连接solr服务器(单机版)
        SolrServer solrServer = new HttpSolrServer(baseUrl);
        //更新(与添加一致,只要ID相同,就是更新;ID不同,就是添加)
    }

4、查

/**
     * 查询
     * @throws IOException
     * @throws SolrServerException
     */
    @Test
    public void testSearchIndex() throws IOException, SolrServerException {
        String baseUrl = "http://localhost:8080/solr";
        //连接solr服务器(单机版)
        SolrServer solrServer = new HttpSolrServer(baseUrl);
        //查询 过滤 数据区间 排序 分页(开始行,每页行数) 高亮 默认域 只查询指定域
        SolrQuery solrQuery = new SolrQuery();

        //1、关键词(不设查询条数的话,默认返回10条)
//        solrQuery.set("q", "book_name:爱");
        solrQuery.setQuery("book_name:爱");

        ///2、过滤条件
        solrQuery.setFilterQueries("book_tags:心理学");

        ///3、区间(主要用于数值型索引)
        solrQuery.setFilterQueries("id:[1000 TO 5000]");

        ///4、排序
        solrQuery.addSort("id", SolrQuery.ORDER.desc);

        //5、分页
        solrQuery.setStart(0);
        solrQuery.setRows(5);

        //6、设置默认域
        solrQuery.set("df", "book_name");

        //7、指定查询域(显示的结果,未指定的不显示)
//        solrQuery.set("fl", "id,book_name"); 和下面同等效果
        solrQuery.setFields("id", "book_name");

        //8、高亮
            //8.1打开高亮开关
            solrQuery.setHighlight(true);
            //8.2指定高亮域
            solrQuery.addHighlightField("book_name");
            //8.3指定高亮域前缀
            solrQuery.setHighlightSimplePre("<span style='color:red'>");
            //8.3指定高亮域后缀
            solrQuery.setHighlightSimplePost("</span>");

        //执行查询
        QueryResponse queryResponse = solrServer.query(solrQuery);
        //文档结果集
        SolrDocumentList documentList = queryResponse.getResults();

        /**
         * 获取高亮文档结果集(solr服务器再返回查询结果集时,普通查询和高亮查询是两个结果集,要分别遍历显示)
         * 基本结构:
         * 最外层Map: K id V Map
         * 内层Map:K 域名 V List
         * List: list.get(0)
         */
        Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();

        //总条数
        long numFound = documentList.getNumFound();
        System.out.println(numFound);

        for (SolrDocument solrDocument : documentList){
            System.out.println(solrDocument.get("id"));
            System.out.println(solrDocument.get("book_name"));
            System.out.println(solrDocument.get("book_author"));
            System.out.println(solrDocument.get("book_tags"));

            System.out.println("------------------------------------------------");
            /**
             * 获取高亮文档结果集
             * 基本结构:
             * 最外层Map: K id V Map
             * 内层Map:K 域名 V List
             * List: list.get(0)
             */
            Map<String, List<String>> map = highlighting.get(solrDocument.get("id"));
            List<String> list = map.get("book_name");
            System.out.println(list.get(0));

        }
    }

猜你喜欢

转载自blog.csdn.net/panchang199266/article/details/81909603
今日推荐