Solr的学习使用之(六)获取数据列表-SolrDocumentList
以下是我项目中获取新闻数据列表的写法,包括数据总量、数据列表,接下来会贴出分片查询(facet)等高级查询
基本的注释都有了:
- private ListPage<News> queryFromSolr(NewsQueryParameters queryParameters, Keyword keyword) {
- if (queryParameters == null) {
- throw new IllegalArgumentException("查询参数为空");
- }
- ListPage<News> result = new ListPage<News>();
- HttpSolrServer solrServer = SolrServer.getInstance().getServer();
- SolrQuery sQuery = new SolrQuery();
- try {
- String para = this.initKeywordQueryPara(keyword);//初始化para参数方法
- int pageNo=queryParameters.getPageNo();
- int pageSize=queryParameters.getPageSize();
- sQuery.setStart((pageNo - 1) * pageSize);//设置起始页,类似于sql的分页查询
- sQuery.setRows(pageSize);//设置每页大小,类似于sql的分页查询
- //排序条件
- sQuery.setSort("publishTime", SolrQuery.ORDER.desc);
- sQuery.setQuery(para);//这边的值大概是酱紫的 "* AND publishTime:[1360000 TO 13700000] AND contentStr:\"关键字\"";
- QueryResponse response = solrServer.query(sQuery,SolrRequest.METHOD.POST);
- SolrDocumentList list = response.getResults();//response.getResults()返回的类型是SolrDocumentList,solr文档集,所以用它来接收
- Integer counts = (int) list.getNumFound();//获取总数,这个可以从solr Admin 管理页面里看出来,当我们去Query时,结果中也有一个numFound的属性
- List<News> newsList = new ArrayList<News>();
- for (SolrDocument solrDocument : list) {
- News news = null;
- String id = (String) solrDocument.getFieldValue("id");//这边是获取solr上有存储的字段,也就是我们在schema.xml文件里配置的field标签的stored属性,=true就会存储在solr服务器上,因为我的schema.xml只配置id的stored=true,所以这边我先通过获取id,在通过id去数据库获取具体的新闻信息
- news = newsDAO.findById(id);
- if(news != null){
- newsList.add(news);
- }
- }
- result.setCurrentPageSize(pageSize);
- result.setCurrentPageNo(pageNo);
- result.setTotalCount(counts);
- result.setDataList(newsList);
- return result;
- } catch (SolrServerException e) {
- log.error("查询solr失败", e);
- e.printStackTrace();
- } finally{
- solrServer.shutdown();
- solrServer = null;
- }
- return result;
- }
- public String initKeywordQueryPara(Keyword keyword){
- String para = "*";
- long dataTimeStart = 0;
- long dataTimeEnd = 0;
- if(keyword.getMonitoringBeginTime() != null){
- dataTimeStart = keyword.getMonitoringBeginTime().getTime();
- }
- if(keyword.getMonitoringEndTime() != null){
- Date endTime = DateUtil.getNextDayCurrDay(keyword.getMonitoringEndTime(), 1);
- dataTimeEnd = endTime.getTime();
- }
- para = para + " AND publishTime:["
- + (dataTimeStart == 0 ? "*" : dataTimeStart) + " TO "
- + (dataTimeEnd == 0 ? "*" : dataTimeEnd) + "]";
- String keywords = keyword.getKeywordName();
- if(keywords !=null && keywords.length() > 0){
- String[] targetArr = keywords.split(",");
- para = para + " AND (";
- for (int i = 0; i < targetArr.length; i++) {
- if (i != 0) {
- para = para + " OR ";
- }
- para = para + "contentStr:\"" + targetArr[i] + "\"";
- }
- para = para + ")";
- }return para;
- }
Solr的学习使用之(六)获取数据列表-SolrDocumentList的更多相关文章
- .NET MVC 学习笔记(六)— 数据导入
.NET MVC 学习笔记(六)—— 数据导入 在程序使用过程中,有时候需要新增大量数据,这样一条条数据去Add明显不是很友好,这时候最好就是有一个导入功能,导入所需要的数据,下面我们就一起来看一下导 ...
- [ionic开源项目教程] - 第4讲 通Service层获取数据列表
第4讲:通Service层获取数据列表 上一讲中页面的基本架构已完成,这一讲介绍如何通过service层从服务器请求数据,在通过controller层为载体,显示到视图层. 1.在services.j ...
- WCF学习心得------(六)数据协定
--前言 最近各种事忙的把之前的WCF学习给耽误了一些,今天抽时间把之前的学习内容给总结了一下,因为知识点比较细碎没有做太多的练习示例,只是对其中关键的知识点做了总结,希望可以对大家有所帮助. 第六章 ...
- JavaScript学习总结(六)数据类型和JSON格式
转自:http://segmentfault.com/a/1190000000668072 什么是JSON JSON:JavaScript 对象表示法(JavaScript Object Notati ...
- MyCat 学习笔记 第六篇.数据分片 之 按月数据分片
1 应用场景 Mycat 有很多数据分库规则,接下来几篇就相关觉得常用的规则进行试用与总结. 一般来说,按自然月份来进行数据分片的规则比较适用于商城订单查询,类似最近1周.2周.3个月内的数据.或是报 ...
- R语言学习笔记(六): 列表及数据框的访问
List R语言中各组件的名称叫做标签(tags),访问列表有3种方法: j$salary 通过标签名字访问,只要不引起歧义,可以只写出前几个字母. j[['sal']] 夹在两个中括号时引号里的标签 ...
- Python基础学习参考(六):列表和元组
一.列表 列表是一个容器,里面可以放置一组数据,并且列表中的每个元素都具有位置索引.列表中的每个元素是可以改变的,对列表操作都会影响原来的列表.列表的定义通过"[ ]"来定义,元素 ...
- asp.net中,我们使用ashx获取数据列表,在前端使用$.ajax()解析
一直在想在asp.net中怎么才能向在java中那样用struts那样做页面请求. 当然asp.net mvc就是类似struts的东西吧,不过还没来得及学习. 今天就用ashx来接收页面请求,并调用 ...
- 使用foreach获取数据列表的全部信息
先把代码列出来:(在admin/listAdmin.php中) <?php foreach($rows as $row):?> //注意,这里的foreach($rows as $row) ...
随机推荐
- SQL SERVER 数据库如何限制一列不能重复(已经有主键)
ALTER TABLE 表名ADDCONSTRAINT 约束名 UNIQUE (列名) -------------------------------------------------------- ...
- C#项目类型分三种,Dos(控制台),c/s(客户端与服务器),b/s(浏览器/服务器)
- Anaconda-navigator 打不开的解决方法(亲测有效!)
本文链接:https://blog.csdn.net/qq_42489092/article/details/92208822method_1:每当你打不开应用时,不妨试一下:用管理员身份运行 请用管 ...
- webstorm tools window
webstorm左侧的文件列表不见了, 通过菜单,view-->tools window-->project window就可以找到
- React-Native 之 GD (二十一)APP 打包
1.生成一个签名密钥: 在 /android/app 下运行 说明:keytool -genkey -v -keystore my-release-key.keystore -alias my-key ...
- docker容器挂载docker.sock,在容器内部直接与docker守护进程通信进行接口调用
一.docker container实现 1.docker容器启动时挂载docker.sock docker run -it -- 2.curl调用接口 curl -s --unix-socket / ...
- LinkedBlockingQueue 源码分析
LinkedBlockingQueue LinkedBlockingQueue 是基于链表实现的,可以选择有界或无界的阻塞队列. 队列的元素按照 FIFO 的顺序访问,新增元素添加到队列尾部,移除元素 ...
- 使用spring配置类代替xml配置文件注册bean类
spring配置类,即在类上加@Configuration注解,使用这种配置类来注册bean,效果与xml文件是完全一样的,只是创建springIOC容器的方式不同: //通过xml文件创建sprin ...
- VMware 虚拟化编程(11) — VMware 虚拟机的全量备份与增量备份方案
目录 目录 前文列表 全量备份数据的获取方式 增量备份数据的获取过程 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VMware 虚拟化编 ...
- adbl连接不上 daemon not running. starting it now on port 5037 ADB server didn't ACK
http://blog.csdn.net/prettyice2005/article/details/38682443 adbl连接不上 daemon not running. starting i ...