以下是我项目中获取新闻数据列表的写法,包括数据总量、数据列表,接下来会贴出分片查询(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的更多相关文章

  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. BZOJ 2427: [HAOI2010]软件安装 tarjan + 树形背包

    Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和 ...

  2. HDU 6206 Apple ( 高精度 && 计算几何 && 三点构圆求圆心半径 )

    题意 : 给出四个点,问你第四个点是否在前三个点构成的圆内,若在圆外输出"Accepted",否则输出"Rejected",题目保证前三个点不在一条直线上. 分 ...

  3. Pandas中的qcut和cut

    qcut与cut的主要区别: qcut:传入参数,要将数据分成多少组,即组的个数,具体的组距是由代码计算 cut:传入参数,是分组依据.具体见示例 1.qcut方法,参考链接:http://panda ...

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

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

  5. 笨办法学Python(learn python the hard way)--练习36-37

    练习37 1.Keywords(关键字) anddel fromnotwhileaselifglobal orwithassert elseifpass yield break except impo ...

  6. jq和js用法:入口写法

    jq和js入口写法demo: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  7. 解决RHEL6 vncserver 启动 could not open default font 'fixed'错误.

    https://blog.csdn.net/silencegll/article/details/51320629

  8. 图像bayer格式介绍【转】

    本文转载自:http://www.cnblogs.com/whw19818/p/6223143.html 1 图像bayer格式介绍 bayer格式图片是伊士曼·柯达公司科学家Bryce Bayer发 ...

  9. 深入探讨 Python 的 import 机制:实现远程导入模块

        深入探讨 Python 的 import 机制:实现远程导入模块 所谓的模块导入( import ),是指在一个模块中使用另一个模块的代码的操作,它有利于代码的复用. 在 Python 中使用 ...

  10. postman连接mysql执行操作

    postman也可以连接mysql 目录 1.安装 2.启动服务 3.执行sql语句 1.安装 想要postman连接mysql,需要安装xmysql,启动该服务,然后才可以调用. 预置条件:完成no ...