solr-5.0.0使用SolrJ操作solr API

solrJ介绍  

solrJ是一个用来访问solr的java客户端,提供了索引和搜索的方法(将一些常用的命令封装进去了),通过solrJ提供的API 接口来操作solr服务。 SolrJ通过封装httpClient方法,来操作solr的API的。即SolrJ底层还是通过使用httpClient中的方法来完成Solr的操作


添加jar包,maven工程需要添加依赖,普通的java工程需要自己jar包。

maven工程依赖:


如果你本地仓库没有 zookeeper的jar包跟 slf4j-api的jar也会直接报错,maven工程可以去maven库找一下,普通的java工程,可以在网上找一下

maven库:http://mvnrepository.com/



启动Solr服务器

1.添加数据到索引库

 /** 
     * 添加索引到solr服务器中 
     * @throws Exception 
     */  
    @Test  
    public void testAddContent() throws Exception{  
        //设置solr服务器的路径,默认是使用第一个core库
        String baseURL = "http://localhost:8085/solr/core"; 	//注意core是在Solr客户端定义过的库    
        // 1.创建服务器连接对象  
        HttpSolrServer httpSolrServer = new HttpSolrServer(baseURL);  
        // 2.创建新的文档对象  
        SolrInputDocument solrInputDocument = new SolrInputDocument();  
        //向文档中添加域以及对应的值,注意:所有的域必须在schema.xml中定义过
        solrInputDocument.setField("id", "21");  
        solrInputDocument.setField("name", "zsp123");  
        solrInputDocument.setField("password", "密码");  
        solrInputDocument.setField("age", "11");  
        // 3.将文档写入索引库中
        httpSolrServer.add(solrInputDocument);  
        // 4.进行手动提交,否则无法进行添加  
        httpSolrServer.commit();  
    }  
    


查看添加的数据:

2.修改索引:根据id修改,如果id存在是修改,不存在是新增

/** 
     * 修改文档内容 
     * 修改其实和添加是一样的,因为只要添加的ID是一样的,那么就会把原来的删除了,然后再添加一个 
     * @throws IOException  
     * @throws SolrServerException  
     */
    @Test  
    public void updateContent() throws SolrServerException, IOException{  
    	 //设置solr服务器的路径,默认是使用第一个core库
        String baseURL = "http://localhost:8085/solr/core";  
        // 1.创建服务器连接对象  
        HttpSolrServer httpSolrServer = new HttpSolrServer(baseURL);  
        // 2.创建新的文档对象  
        SolrInputDocument solrInputDocument = new SolrInputDocument();  
        //设置文档的域  
        solrInputDocument.setField("id", "21");  //如果id存在就是修改,不存在新增
        solrInputDocument.setField("name", "zsp1232");  
        solrInputDocument.setField("password", "密码2");  
        solrInputDocument.setField("age", "112");  
        // 3.将文档写入索引库中
        httpSolrServer.add(solrInputDocument);  
        // 4.进行手动提交,否则无法进行添加  
        httpSolrServer.commit();  
    }  

查看修改结果:


3.删除索引,SolrJ封装了有很多方法:

3.1根据id删除:

 /** 
     * 进行删除文档操作 :根据id删除
     * @throws SolrServerException 
     * @throws IOException 
     */  
    @Test  
    public void testDeleteById() throws Exception{  
    	 //设置solr服务器的路径,默认是使用第一个core库
        String baseURL = "http://localhost:8085/solr/core";  
        // 1.创建服务器连接对象  
        HttpSolrServer httpSolrServer = new HttpSolrServer(baseURL);  
        //删除某个特定域的特定值的数据  
        httpSolrServer.deleteById("21");  
        //提交
        httpSolrServer.commit();
    }  
    


3.2根据条件查询删除:

/** 
     * 进行删除文档操作 :根据条件查询删除
     * @throws SolrServerException 
     * @throws IOException 
     */  
    @Test  
    public void testDeleteByQ() throws Exception{  
    	 //设置solr服务器的路径,默认是使用第一个core库
        String baseURL = "http://localhost:8085/solr/core";  
        // 1.创建服务器连接对象  
        HttpSolrServer httpSolrServer = new HttpSolrServer(baseURL);  
        //删除索引 ,参数是设置需要删除的数据的域和值
        httpSolrServer.deleteByQuery("password:密码");  
        //删除全部,
        //httpSolrServer.deleteByQuery("*:*");  
        //提交
        httpSolrServer.commit();
    } 


注意:因为在(schema.xml中)制定业务域的时候如果indexed=false,即不被索引,所以不能根据域名去查询


4、查询索引

4.1简单查询:根据id查询索引

查询id为1的索引:

/**
     * 简单查询:根据id查询索引
     * @throws SolrServerException
     * @throws IOException
     */
    @Test
    public void queryById() throws SolrServerException, IOException{
    	 //1.创建连接
        HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8085/solr/core");
        //2.创建查询语句
        SolrQuery query = new SolrQuery();
        //3.设置查询条件
        query.set("q", "id:1");
        //4.执行查询
        QueryResponse queryResponse = solrServer.query(query);
        //5.取文档列表public class SolrDocumentList extends ArrayList<SolrDocument>
        SolrDocumentList documentList = queryResponse.getResults();
        for (SolrDocument solrDocument : documentList) {
            //取各个文档信息
            System.out.println("id:"+solrDocument.get("id")+" ");
            System.out.println("name:"+solrDocument.get("name")+" ");
            System.out.println("password:"+solrDocument.get("password")+" ");
            System.out.println("age:"+solrDocument.get("age")+" ");
        }
    }


查询结果:



4.2根据条件进行查询:

/**
     * 根据条件进行查询
     * @throws Exception
     */
    @Test
    public void quertByConditions () throws Exception{
        //1.创建连接
    	HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8085/solr/core");
        //2.创建查询语句
        SolrQuery query = new SolrQuery();
        //3.设置查询条件
        query.set("q", "刘");//设置查询关键字
        query.setSort("id", ORDER.desc);//按照id降序排列
        //分页条件
        query.setStart(0);	//从下标0开始
        query.setRows(2);	//查询条数为2条
        query.set("df", "name");//默认在name域进行查询
        //4、执行查询
        QueryResponse queryResponse = solrServer.query(query);
        //5.获取文档列表
        SolrDocumentList documentList = queryResponse.getResults();
        //获取总记录数
        long numFound = documentList.getNumFound();
        System.out.println("总记录数:" + numFound);
        for (SolrDocument solrDocument : documentList) {
            //取各个文档信息
        	 System.out.println("id:"+solrDocument.get("id")+" ");
             System.out.println("name:"+solrDocument.get("name")+" ");
             System.out.println("password:"+solrDocument.get("password")+" ");
             System.out.println("age:"+solrDocument.get("age")+" ");
             System.out.println();
        }
    }


查询结果:


注:如果设置了默认查询域的话,自己又不想在这个域内查那么在查询关键字前要注明要在哪个域查,比如:”name:刘”:

例:



4.3 测试复杂查询:取高亮

 /*
     * 测试复杂查询:取高亮
     */
    @Test
    public void testHighLighting() throws Exception{
        //1、创建连接
    	HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8085/solr/core");
        //2、创建查询语句
        SolrQuery query = new SolrQuery();
        //3、设置查询条件
        query.set("q", "刘");//设置查询关键字
        /* query.setSort("id", ORDER.desc);//按照id降序排列*/   
        query.setStart(0);
        query.setRows(5);//分页条件
        query.set("df", "name");
        //开启高亮显示
        query.setHighlight(true);
        query.setHighlightSimplePre("<span style='color:red'>");  
        query.setHighlightSimplePost("</span>");  
        //4、执行查询
        QueryResponse queryResponse = solrServer.query(query);
        //5、取高亮
        Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
        //6、获取文档列表
        SolrDocumentList documentList = queryResponse.getResults();
        //7、遍历查询结果
        for (SolrDocument solrDocument : documentList) {
            System.out.print(solrDocument.get("id")+" ");
            String id = (String) solrDocument.get("id");	//获取文档id
            List<String> titleList = highlighting.get(id).get("name");	//获取条件查,高亮域
            if (titleList !=null && titleList.size()>0) {
                //取到高亮,输出高亮
                System.out.print(titleList.get(0));
            }
            System.out.println();
        }
    }
查看结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值