(2)Solr:Java后台获取Solr查询信息

这里介绍两种方法:1.Solrj,2.httpClient httpGet
1.Solrj
首先需要下载Solrj相关的jar包,其实在Solr的下载包中就已经包含了Solrj jar包和依赖的jar包,具体位置:
依赖:Solr解压文件\dist\solrj-lib
Solrj:Solr解压文件\dist solr-solrj-5.5.5.jar

将相关jar包放入项目中
连接Solr服务器的方式(这里使用在本地搭建的Solr服务器来做示例,本地Solr服务器搭建方法http://blog.csdn.net/yeyinglingfeng/article/details/79126161

        HttpSolrClient server = new HttpSolrClient("http://10.12.30.85:8080/solr/core1");
        server.setConnectionTimeout(300000);//连接超时时间5分钟
        server.setParser(new XMLResponseParser()); // binary parser is used by default
        server.setSoTimeout(1000); // socket read timeout
        server.setDefaultMaxConnectionsPerHost(100);
        server.setMaxTotalConnections(100);
        server.setFollowRedirects(false); // defaults to false
        server.setAllowCompression(true);

        SolrQuery query=new SolrQuery();
        query.setQuery("id:151");
        query.addFilterQuery("itemName:yby");
        query.addField("itemName,ownerNo");

        QueryResponse responseInfo = server.query(query);
        List<trainingItem> trainingItem=responseInfo.getBeans(trainingItem.class);
        for(trainingItem item:trainingItem){
            System.out.println(item.getId()+":"+item.getItemNo()+":"+item.getItemName()+":"+item.getOwnerNo());
        }

query.setQuery("id:151");代表Solr控制界面Query中的p字段
query.addFilterQuery("itemName:yby");代表fq字段
query.addField("itemName,ownerNo");代表fl字段

QueryResponse responseInfo = server.query(query);拼接/发送信息,并获取Solr服务器返回的数据。
trainingItem是一个javaBean,用来存储拿出的数据信息,参数对应查询出的信息的对应列。

2.httpClient
从第1种获取数据的方式中我们可以看到是通过HttpSolrClient这个类来实现的,是不是有种熟悉的感觉,httpClient,想不到你个浓眉大眼的也混了进来,由此推测是否也可以通过httpClient的httpGet,httpPost方式获取数据呢?
再来回顾下Solr简介:用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。这是上一篇文章中提到过的,所以,我们应该可以通过httpGet的方式来获取数据(说白了就是网页爬取方式了)。
再来看下Solr服务器 Query界面,当输入完产寻条件后点击查询,我们可以看到右边界面的最上方有一个网址:
这里写图片描述
把网址输入浏览器,可以看到浏览器返回了json格式的查询结果:
这里写图片描述
所以,在简单的查询条件下,是可以直接用上面这种方式访问数据的,只是需要我们自己来拼接下网址罢了。
httpClient,httpGet方式爬取页面:
这里需要fastjson-1.1.24.jar来转换json数据。
因为从上图中可知,我们所需的数据都存放在response,docs中,所以,使用httpGet获取到json数据后,可以一步步的去拿取到所需信息。

        CloseableHttpClient httpClient = HttpClients.createDefault(); 
        //查询网址,实际使用时需要拼接入查询条件
        HttpGet httpGet = new HttpGet("http://10.12.30.85:8080/solr/core1/select?indent=on&q=*:*&wt=json");

        HttpResponse response;  
        String line; 
        response = httpClient.execute(httpGet);

        HttpEntity httpEntity = response.getEntity();  
        BufferedReader bufferedReader = null;  
        bufferedReader = new BufferedReader(new InputStreamReader(  
                httpEntity.getContent(), "utf-8"), 8 * 1024);  
        String entityStringBuilder = "";  
        while ((line = bufferedReader.readLine()) != null) {  
            entityStringBuilder+=line + "\n";  
        }  
        JSONObject obj = JSONObject.parseObject(entityStringBuilder);
        obj=obj.getJSONObject("response");
        JSONArray param = obj.getJSONArray("docs");
        List<trainingItem> list = new ArrayList<trainingItem>();
        list=JSONObject.parseArray(param.toString(),trainingItem.class);
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i).getId()+":"+list.get(i).getItemName());
        }

其实对比下2种方式,Solrj中的HttpSolrClient,QueryResponse,可以看出Solrj的实现原理应该也是httpClient,推荐使用第一种方式,毕竟连接更加稳定。
这时顺便看下Solrj依赖的jar包:
这里写图片描述
emmmm…
这里写图片描述

猜你喜欢

转载自blog.csdn.net/yeyinglingfeng/article/details/79162544
今日推荐