以下是我项目中获取新闻数据列表的写法,包括数据总量、数据列表,接下来会贴出分片查询(facet)等高级查询

基本的注释都有了:

  1. private ListPage<News> queryFromSolr(NewsQueryParameters queryParameters, Keyword keyword) {
  2. if (queryParameters == null) {
  3. throw new IllegalArgumentException("查询参数为空");
  4. }
  5. ListPage<News> result = new ListPage<News>();
  6. HttpSolrServer solrServer = SolrServer.getInstance().getServer();
  7. SolrQuery sQuery = new SolrQuery();
  8.  
  9. try {
  10. String para = this.initKeywordQueryPara(keyword);//初始化para参数方法
  11. int pageNo=queryParameters.getPageNo();
  12. int pageSize=queryParameters.getPageSize();
  13.  
  14. sQuery.setStart((pageNo - 1) * pageSize);//设置起始页,类似于sql的分页查询
  15. sQuery.setRows(pageSize);//设置每页大小,类似于sql的分页查询
  16. //排序条件
  17. sQuery.setSort("publishTime", SolrQuery.ORDER.desc);
  18.  
  19. sQuery.setQuery(para);//这边的值大概是酱紫的 "* AND publishTime:[1360000 TO 13700000] AND contentStr:\"关键字\"";
  20. QueryResponse response = solrServer.query(sQuery,SolrRequest.METHOD.POST);
  21. SolrDocumentList list = response.getResults();//response.getResults()返回的类型是SolrDocumentList,solr文档集,所以用它来接收
  22. Integer counts = (int) list.getNumFound();//获取总数,这个可以从solr Admin 管理页面里看出来,当我们去Query时,结果中也有一个numFound的属性
  23. List<News> newsList = new ArrayList<News>();
  24. for (SolrDocument solrDocument : list) {
  25. News news = null;
  26. String id = (String) solrDocument.getFieldValue("id");//这边是获取solr上有存储的字段,也就是我们在schema.xml文件里配置的field标签的stored属性,=true就会存储在solr服务器上,因为我的schema.xml只配置id的stored=true,所以这边我先通过获取id,在通过id去数据库获取具体的新闻信息
  27. news = newsDAO.findById(id);
  28. if(news != null){
  29. newsList.add(news);
  30. }
  31.  
  32. }
  33.  
  34. result.setCurrentPageSize(pageSize);
  35. result.setCurrentPageNo(pageNo);
  36. result.setTotalCount(counts);
  37. result.setDataList(newsList);
  38. return result;
  39. } catch (SolrServerException e) {
  40. log.error("查询solr失败", e);
  41. e.printStackTrace();
  42. } finally{
  43. solrServer.shutdown();
  44. solrServer = null;
  45. }
  46.  
  47. return result;
  48.  
  49. }
  1. public String initKeywordQueryPara(Keyword keyword){
  2.  
  3. String para = "*";
  4.  
  5. long dataTimeStart = 0;
  6. long dataTimeEnd = 0;
  7.  
  8. if(keyword.getMonitoringBeginTime() != null){
  9. dataTimeStart = keyword.getMonitoringBeginTime().getTime();
  10. }
  11. if(keyword.getMonitoringEndTime() != null){
  12. Date endTime = DateUtil.getNextDayCurrDay(keyword.getMonitoringEndTime(), 1);
  13. dataTimeEnd = endTime.getTime();
  14. }
  15. para = para + " AND publishTime:["
  16. + (dataTimeStart == 0 ? "*" : dataTimeStart) + " TO "
  17. + (dataTimeEnd == 0 ? "*" : dataTimeEnd) + "]";
  18.  
  19. String keywords = keyword.getKeywordName();
  20. if(keywords !=null && keywords.length() > 0){
  21. String[] targetArr = keywords.split(",");
  22. para = para + " AND (";
  23. for (int i = 0; i < targetArr.length; i++) {
  24. if (i != 0) {
  25. para = para + " OR ";
  26. }
  27. para = para + "contentStr:\"" + targetArr[i] + "\"";
  28. }
  29. para = para + ")";
  30.  
  31. }return para;
  32. }

Solr的学习使用之(六)获取数据列表-SolrDocumentList的更多相关文章

  1. .NET MVC 学习笔记(六)— 数据导入

    .NET MVC 学习笔记(六)—— 数据导入 在程序使用过程中,有时候需要新增大量数据,这样一条条数据去Add明显不是很友好,这时候最好就是有一个导入功能,导入所需要的数据,下面我们就一起来看一下导 ...

  2. [ionic开源项目教程] - 第4讲 通Service层获取数据列表

    第4讲:通Service层获取数据列表 上一讲中页面的基本架构已完成,这一讲介绍如何通过service层从服务器请求数据,在通过controller层为载体,显示到视图层. 1.在services.j ...

  3. WCF学习心得------(六)数据协定

    --前言 最近各种事忙的把之前的WCF学习给耽误了一些,今天抽时间把之前的学习内容给总结了一下,因为知识点比较细碎没有做太多的练习示例,只是对其中关键的知识点做了总结,希望可以对大家有所帮助. 第六章 ...

  4. JavaScript学习总结(六)数据类型和JSON格式

    转自:http://segmentfault.com/a/1190000000668072 什么是JSON JSON:JavaScript 对象表示法(JavaScript Object Notati ...

  5. MyCat 学习笔记 第六篇.数据分片 之 按月数据分片

    1 应用场景 Mycat 有很多数据分库规则,接下来几篇就相关觉得常用的规则进行试用与总结. 一般来说,按自然月份来进行数据分片的规则比较适用于商城订单查询,类似最近1周.2周.3个月内的数据.或是报 ...

  6. R语言学习笔记(六): 列表及数据框的访问

    List R语言中各组件的名称叫做标签(tags),访问列表有3种方法: j$salary 通过标签名字访问,只要不引起歧义,可以只写出前几个字母. j[['sal']] 夹在两个中括号时引号里的标签 ...

  7. Python基础学习参考(六):列表和元组

    一.列表 列表是一个容器,里面可以放置一组数据,并且列表中的每个元素都具有位置索引.列表中的每个元素是可以改变的,对列表操作都会影响原来的列表.列表的定义通过"[ ]"来定义,元素 ...

  8. asp.net中,我们使用ashx获取数据列表,在前端使用$.ajax()解析

    一直在想在asp.net中怎么才能向在java中那样用struts那样做页面请求. 当然asp.net mvc就是类似struts的东西吧,不过还没来得及学习. 今天就用ashx来接收页面请求,并调用 ...

  9. 使用foreach获取数据列表的全部信息

    先把代码列出来:(在admin/listAdmin.php中) <?php foreach($rows as $row):?> //注意,这里的foreach($rows as $row) ...

随机推荐

  1. SQL SERVER 数据库如何限制一列不能重复(已经有主键)

    ALTER TABLE 表名ADDCONSTRAINT 约束名 UNIQUE (列名) -------------------------------------------------------- ...

  2. C#项目类型分三种,Dos(控制台),c/s(客户端与服务器),b/s(浏览器/服务器)

  3. Anaconda-navigator 打不开的解决方法(亲测有效!)

    本文链接:https://blog.csdn.net/qq_42489092/article/details/92208822method_1:每当你打不开应用时,不妨试一下:用管理员身份运行 请用管 ...

  4. webstorm tools window

    webstorm左侧的文件列表不见了, 通过菜单,view-->tools window-->project window就可以找到

  5. React-Native 之 GD (二十一)APP 打包

    1.生成一个签名密钥: 在 /android/app 下运行 说明:keytool -genkey -v -keystore my-release-key.keystore -alias my-key ...

  6. docker容器挂载docker.sock,在容器内部直接与docker守护进程通信进行接口调用

    一.docker container实现 1.docker容器启动时挂载docker.sock docker run -it -- 2.curl调用接口 curl -s --unix-socket / ...

  7. LinkedBlockingQueue 源码分析

    LinkedBlockingQueue LinkedBlockingQueue 是基于链表实现的,可以选择有界或无界的阻塞队列. 队列的元素按照 FIFO 的顺序访问,新增元素添加到队列尾部,移除元素 ...

  8. 使用spring配置类代替xml配置文件注册bean类

    spring配置类,即在类上加@Configuration注解,使用这种配置类来注册bean,效果与xml文件是完全一样的,只是创建springIOC容器的方式不同: //通过xml文件创建sprin ...

  9. VMware 虚拟化编程(11) — VMware 虚拟机的全量备份与增量备份方案

    目录 目录 前文列表 全量备份数据的获取方式 增量备份数据的获取过程 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VMware 虚拟化编 ...

  10. 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 ...