本文转载自:http://blog.csdn.net/wangxiaotongfan/article/details/46531729?locationNum=6

在es中所有的查询结果都会保存在SearchResponse中,在从SearchResponse中读取数据的时候,有两种方式:第一种是对Query的结果进行读取,使用的是hit,每一条查询到的doc都是一个hit,可以将每个hit转换为map形式的数据,map的具体形式为<"field","value">的形式,可以得到每一个字段的名称与内容(具体代码如下);
 
public static List<Product> getSC(SearchResponse sr) {
  List<Product> products = new ArrayList<Product>();
  for (SearchHit hit : sr.getHits()) {
   Map<String, Object> source = hit.getSource();
   if (!source.isEmpty()) {
    for (Iterator<Map.Entry<String, Object>> it = source.entrySet()
      .iterator(); it.hasNext();) {
     Map.Entry<String, Object> entry = it.next();
     if ("title".equals(entry.getKey())) {
      System.out.println("title: "
       + entry.getValue());
     }
 
第二种方式是针对查询中的聚合问题(aggregation),聚合完成后的每条doc都是一个bucket(桶),他的访问只能通过bucket来进行,而不能使用hit,其操作形式具体如下:
 
Terms terms = response.getAggregations().get("hospital"); //hospital为查询聚合时,指定的聚合内容的名称
  DoctorFeeBean docBean = null;
  for (Bucket bucket : terms.getBuckets()) {
   docBean = new DoctorFeeBean();
   String name = bucket.getKey(); //按照聚合字段聚合完成后的名称
   long jiuzhencishu = bucket.getDocCount();//该字段的总共的次数
   Sum sum_money = bucket.getAggregations().get("sum_fee");
   double sum = sum_money.getValue();
   Cardinality cardinality = response.getAggregations().get("jiuzhenrenci");
   long num = cardinality.getValue();
   String temp [] = new String[2];
   temp = getInfo(client, name);
   String hospital = temp[0];
   String doctor_Department = temp[1];
   double feeAvgPerson = sum / num;
   
   docBean.setDoctor_Name(name);
   docBean.setDoctor_Hospital(hospital);
   docBean.setDoctor_Department(doctor_Department);
   docBean.setDoctor_Total_Fee(sum);
   docBean.setNumber_Of_Visit_Doctor((int)jiuzhencishu);
   docBean.setVisitPersonNumber((int)num);
   docBean.setFeeAvgPerson(feeAvgPerson);
   doctorFeeBeans.add(docBean);
  }

ElasticSearch读取查询结果(search)的更多相关文章

  1. ElasticSearch 常用查询语句

    为了演示不同类型的 ElasticSearch 的查询,我们将使用书文档信息的集合(有以下字段:title(标题), authors(作者), summary(摘要), publish_date(发布 ...

  2. 分布式搜索引擎Elasticsearch的查询与过滤

    一.写入 先来一个简单的官方例子,插入的参数为-XPUT,插入一条记录. curl -XPUT 'http://localhost:9200/test/users/1' -d '{ "use ...

  3. 【转】elasticsearch的查询器query与过滤器filter的区别

    很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单-  当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...

  4. 基于百度地图SDK和Elasticsearch GEO查询的地理围栏分析系统(1)

    本文描述了一个系统,功能是评价和抽象地理围栏(Geo-fencing),以及监控和分析核心地理围栏中业务的表现. 技术栈:Spring-JQuery-百度地图WEB SDK 存储:Hive-Elast ...

  5. 002_分布式搜索引擎Elasticsearch的查询与过滤

    一.写入 先来一个简单的官方例子,插入的参数为-XPUT,插入一条记录. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 curl -XPUT 'http:/ ...

  6. ElasticSearch—分页查询

    ElasticSearch查询—分页查询详解 Elasticsearch中数据都存储在分片中,当执行搜索时每个分片独立搜索后,数据再经过整合返回.那么,如何实现分页查询呢? 按照一般的查询流程来说,如 ...

  7. ElasticSearch DSL 查询

    公号:码农充电站pro 主页:https://codeshellme.github.io DSL(Domain Specific Language)查询也叫做 Request Body 查询,它比 U ...

  8. Elasticsearch Kibana查询语法

    Elasticsearch Kibana查询语法 2018年06月03日 23:52:30 wangpei1949 阅读数:3992   Elasticsearch Kibana Discover的搜 ...

  9. Elasticsearch 邻近查询示例

    Elasticsearch 邻近查询示例(全切分分词) JAVA API方式: SpanNearQueryBuilder span = QueryBuilders.spanNearQuery(); s ...

随机推荐

  1. C# 设计模式巩固笔记 - 适配器模式

    前言 多读书.多学习 介绍-适配器模式 定义:适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 实现 这里有 ...

  2. bzoj3401

    题解: 单调栈 一个一个压入 然后比下面高就弹出 代码: #include<bits/stdc++.h> using namespace std; ; int n,tot,a[N],z[N ...

  3. 【WebGL】2.基础概念

    引入Three.js <!DOCTYPE html> <html> <head> <title></title> </head> ...

  4. 表单隐藏域与display:none

    有时候前端进行表单填写是分步骤的,每一步的时候其他步骤相关的表单视图不可见: 针对"不可见",以下有两种处理方式: ①display:none 这种方式呢,比较简单,就是将三个步骤 ...

  5. EasyCMS在幼儿园视频直播项目实战中以redis操作池的方式应对高并发的redis操作问题

    在之前的博客< EasyDarwin幼教云视频平台在幼教平台领域大放异彩!>中我们也介绍到,EasyCMS+EasyDarwin+redis形成的EasyDarwin云平台方案,在幼教平台 ...

  6. python删除list中元素的三种方法

    a.pop(index):删除列表a中index处的值,并且返回这个值. del(a[index]):删除列表a中index处的值,无返回值. del中的index可以是切片,所以可以实现批量删除. ...

  7. iOS限制输入表情(emoji),出现九宫格不能输入的解决方法

    在提交数据发送网络请求,由于用户输入了emoji表情,服务端返回系统异常,体验感很差.为了解决服务器不能验证emoji编码的问题,需要在本地进行emoji的输入控制(一般情况应该由服务器在数据库中添加 ...

  8. [数据处理] LabelEncoder编码

    原创博文,转载请注明出处! # LabelEncoder介绍       LabelEncoder是对不连续的数字或文本编号. # LabelEncoder例子 # -*- coding: utf-8 ...

  9. 类中的__slots__方法与__dict__方法相排斥

    类的 __slots__ 列表 作用: 限定一个类创建的实例只能有固定的属性(实例变量) 不允许对象添加列表以外的属性(实例变量) 防止用户因错写属性的名称而发生程序错误 说明: 1. __slots ...

  10. 每天一个linux命令(目录文件操作):【转载】Linux 目录结构

    对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统至关重要,下面 ...