Elasticsearch  的查询很灵活,并且有Filter,有分组功能,还有ScriptFilter等等,所以很强大。下面上代码:

一个简单的查询,返回一个List<对象> .。

     /**
     * 根据Id 查询 SOBangg
     * @param key
     * @return
     */
    public static List findSOBanggById(String id) {
        Client client = ESTools.client;
        SearchResponse response = client.prepareSearch(MappingManager.INDEX)
        .setTypes(MappingManager.B_TYPE)
        .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
        .setQuery(QueryBuilders.termQuery("id",id))                 // Query           
        .setPostFilter(QueryBuilders.rangeQuery("age").from(12).to(18))     // Filter
        .setFrom(0).setSize(60).setExplain(true)
        .execute()
        .actionGet();
        SearchHits hits = response.getHits();
        List list = new ArrayList();
        for (SearchHit searchHit : hits) {
            Map source = searchHit.getSource();
            SOBangg entity = (SOBangg) JSONObject.toBean(JSONObject.fromObject(source) , SOBangg.class);
            list.add(entity);
        }
        return list;
    }

下面我把我整个类贴出来。

 package com.sojson.core.elasticsearch.manager;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONObject;

import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;

import com.sojson.common.model.SOBang;
import com.sojson.common.model.SOBangg;
import com.sojson.common.model.SOBanggKey;
import com.sojson.core.elasticsearch.utils.ESTools;
import com.sojson.core.mybatis.page.Pagination;

public class SelectManager {
    
    
    /**
     * 分页查询 SOBang
     * @param resultMap
     * @param pageSize
     * @param pageNo
     * @return
     */
    public static Pagination findByPage(Map resultMap,
            Integer pageSize,
            Integer pageNo){
        Pagination page = new Pagination();
        pageNo = null==pageNo?1:pageNo;
        page.setPageNo(pageNo);
        page.setPageSize(pageSize);
        
        
        Client client = ESTools.client;
        SearchRequestBuilder srb = client.prepareSearch(MappingManager.INDEX);
        srb.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
        srb.setTypes(MappingManager.TYPE);
//        srb.setQuery(resultMap);
        srb.setFrom((pageNo - 1) * pageSize).setSize(pageSize)
        .setExplain(true);
        
        SearchResponse response = srb.execute().actionGet();
        SearchHits hits = response.getHits();
        
        page.setTotalCount((int)hits.getTotalHits());
        List list = new ArrayList();
        for (SearchHit searchHit : hits) {
            Map source = searchHit.getSource();
            SOBang entity = (SOBang)JSONObject.toBean(JSONObject.fromObject(source)
                        , SOBang.class);
            list.add(entity);
        }
        page.setList(list);
        return page;
        
    }
    /**
     * 分页查询 SOBangg
     * @param resultMap
     * @param pageSize
     * @param pageNo
     * @return
     */
    public static Pagination findSOBanggByPage(Map resultMap,
            Integer pageSize,
            Integer pageNo){
        Pagination page = new Pagination();
        pageNo = null==pageNo?1:pageNo;
        page.setPageNo(pageNo);
        page.setPageSize(pageSize);
        
        
        Client client = ESTools.client;
        SearchRequestBuilder srb = client.prepareSearch(MappingManager.INDEX);
        srb.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
        srb.setTypes(MappingManager.B_TYPE);
        
        srb.setQuery(QueryBuilders.termQuery("status",0));
        srb.setFrom((pageNo - 1) * pageSize).setSize(pageSize)
        .setExplain(true);
        
        SearchResponse response = srb.execute().actionGet();
        SearchHits hits = response.getHits();
        
        page.setTotalCount((int)hits.getTotalHits());
        List list = new ArrayList();
        for (SearchHit searchHit : hits) {
            Map source = searchHit.getSource();
            SOBangg entity = (SOBangg) JSONObject
                .toBean(JSONObject.fromObject(source) , SOBangg.class);
            list.add(entity);
        }
        page.setList(list);
        return page;
        
    }
    /**
     * 根据ID查询SOBang
     * @param id
     * @return
     */
    public static SOBang findSOBangById(String id){
        GetRequest rq = new GetRequest(MappingManager.INDEX, MappingManager.TYPE, id);
        //GetResponse response = client.prepareGet(MappingManager.INDEX, MappingManager.TYPE, id);
        GetResponse response = ESTools.client.get(rq).actionGet();
        SOBang entity = null;
        //判断非空
        if(!response.isSourceEmpty()){
            Map data = response.getSource();
            entity = (SOBang)JSONObject.toBean(JSONObject.fromObject(data)
                        ,SOBang.class);
        }
        return entity;
    }
    /**
     * 根据Key 查询 SOBangg
     * @param key
     * @return
     */
    public static SOBangg findSOBanggByKey(SOBanggKey key) {
        String prefix = "%sx_x%s";
        String id = String.format(prefix, key.getId(),key.getGid());
        GetRequest rq = new GetRequest(MappingManager.INDEX, MappingManager.B_TYPE, id);
        //GetResponse response = client.prepareGet(MappingManager.INDEX, MappingManager.TYPE, id);
        GetResponse response = ESTools.client.get(rq).actionGet();
        SOBangg entity = null;
        //判断非空
        if(!response.isSourceEmpty()){
            Map data = response.getSource();
            entity = (SOBangg)JSONObject.toBean(JSONObject.fromObject(data)
                        ,SOBangg.class);
        }
        return entity;
    }
    /**
     * 根据Id 查询 SOBangg
     * @param key
     * @return
     */
    public static List findSOBanggById(String id) {
    
        Client client = ESTools.client;
        SearchResponse response = client.prepareSearch(MappingManager.INDEX)
        .setTypes(MappingManager.B_TYPE)
        .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
        .setQuery(QueryBuilders.termQuery("id",id))                 // Query
    //        .setPostFilter(QueryBuilders.rangeQuery("age").from(12).to(18))     // Filter
        .setFrom(0).setSize(60).setExplain(true)
        .execute()
        .actionGet();
        SearchHits hits = response.getHits();
        List list = new ArrayList();
        for (SearchHit searchHit : hits) {
            Map source = searchHit.getSource();
            SOBangg entity = (SOBangg) JSONObject.toBean(JSONObject.fromObject(source)
                        , SOBangg.class);
            list.add(entity);
        }
        return list;
    }
    
    
    
    public static BangDetailsBo findById(String id) {
        BangDetailsBo result = new BangDetailsBo();
        GetRequest rq = new GetRequest(MappingManager.INDEX, MappingManager.TYPE, id);
        
        GetResponse response = ESTools.client.get(rq).actionGet();
        //判断非空
        if(!response.isSourceEmpty()){
            Map data = response.getSource();
            SOBang entity = (SOBang)JSONObject.toBean(JSONObject.fromObject(data)
                        ,SOBang.class);
            result.setEntity(entity);
        }
        
        return result;
    }
}

Elasticsearch教程(九) elasticsearch 查询数据 | 分页查询的更多相关文章

  1. Oracle、MySql、SQLServer数据分页查询

    看过此博文后Oracle.MySql.SQLServer 数据分页查询,在根据公司的RegionRes表格做出了 SQLserver的分页查询语句: 别名.字段 FROM( SELECT row_nu ...

  2. Oracle、MySql、SQLServer 数据分页查询

    最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...

  3. [.NET] SQL数据分页查询

    [.NET] SQL数据分页查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...

  4. 转Oracle、MySql、SQLServer 数据分页查询

    最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...

  5. CRL快速开发框架系列教程九(导入/导出数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  6. SQL Server -- 回忆笔记(四):case函数,索引,子查询,分页查询,视图,存储过程

    SQL Server知识点回忆篇(四):case函数,索引,子查询,分页查询,视图,存储过程 1. CASE函数(相当于C#中的Switch) then '未成年人' else '成年人' end f ...

  7. MySQL——优化嵌套查询和分页查询

    优化嵌套查询 嵌套查询(子查询)可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中.嵌套查询写起来简单,也容易理解.但是,有时候可以被更有效率的连接(JOIN ...

  8. SQL语句or查询,union all查询,分页查询,分组,AND查询

    一.OR查询 1.在AND多个筛选条件和一个or条件时,如果没有括号包裹,or会就近原则包裹之后的所有and条件,也就是同级的多个and条件只能对,or条件的一边起作用 2.如果or条件两边的筛选条件 ...

  9. Linq高级查询,分页查询及查询分页结合

    一.高级查询与分页查询 1.以...开头    StartsWith Repeater1.DataSource=con.Users.Where(r=>r.Nickname.StartsWith( ...

随机推荐

  1. 【原创】Linux环境下的图形系统和AMD R600显卡编程(3)——AMD显卡简介

    早期的显卡仅用于显示,后来显卡中加入了2D加速部件,这些部件用于做拷屏,画点,画线等操作.随着游戏.三维模拟以及科学计算可视化等需要,对3D的需求逐渐增加,早期图形绘制工作由CPU来完成,要达到真实感 ...

  2. Flask-Migrate拓展数据库表结构

    # 转载请留言联系 在我们用 sqlchemy 模块创建完几个表时,如果在实际生产环境中,需要对表结构进行更改,应该怎么办呢?总不能把表删除了吧,这样数据就会丢失了. 更好的解决办法是使用数据库迁移框 ...

  3. 在vc6里头文件sys/timeb.h里struct timeb各变量的具体含义?

    timeb的定义:struct _timeb{         time_t time;          unsigned short millitm;          short timezon ...

  4. (4)C#变量,常量,数据类型,转义字符,数据类型转换

    一.变量 程序运行期间能够被改变的量称为变量. 变量名称要用小写字母开头,避免用下划线开头. 如果包含多个单词,从第二个单词开始首字母都要大写. 定义并初始化 double pi = 3.14 二.常 ...

  5. Codeforces Round #191 (Div. 2) A. Flipping Game【*枚举/DP/每次操作可将区间[i,j](1=<i<=j<=n)内牌的状态翻转(即0变1,1变0),求一次翻转操作后,1的个数尽量多】

    A. Flipping Game     time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. apache和tomcat群集

    httpd.conf    httpd.conf中添加:    #与tomcat的插件    include "D:\clusterServer\apache\conf\mod_jk.con ...

  7. (转)Limboy:自学 iOS 开发的一些经验

    不知不觉作为 iOS 开发也有两年多的时间了,记得当初看到 OC 的语法时,愣是被吓了回去,隔了好久才重新耐下心去啃一啃.啃了一阵,觉得大概有了点概念,看到 Cocoa 那么多的 Class,又懵了, ...

  8. luogu P1226 取余运算||快速幂

    题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod k=s” s为运算结果 输入输 ...

  9. 数值计算方法 | C语言实现几个数值计算方法(实验报告版)

    目录 写在前面 实验一 牛顿插值方法的实现 实验二 龙贝格求积算法的实现 实验三 高斯列主元消去法的实现 实验四 最小二乘方法的实现 写在前面 使用教材:<数值计算方法>黄云清等编著 科学 ...

  10. Node应用的Systemd启动(转)

    作者: 阮一峰 日期: 2016年3月12日 前面的文章介绍了 Systemd 的操作命令和基本用法,今天给出一个实例,如何使用 Systemd 启动一个 Node 应用. 本文是独立的,不需要前面的 ...